Hi folks, I filed a bug for this on the Oracle site (Review ID: JI-9020901), but thought I’d surface it here too.
When running our code in minified form, I came across a strange compilation failure in Nashorn 8u60. After some reduction, it appears that any code of the following form triggers the failure: true && true, true You should be able to reproduce the failure by entering it into the Nashorn 8u60 shell. The pattern seems to be a binary logical operator appearing anywhere before the final position in a compound expression. The same code works properly in previous releases of Nashorn. java –version: java version "1.8.0_60-ea" Java(TM) SE Runtime Environment (build 1.8.0_60-ea-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b12, mixed mode) Stack trace: Exception in thread "main" java.lang.AssertionError: Failed generating bytecode for <STDIN>:1 at jdk.nashorn.internal.codegen.CompilationPhase$13.transform(CompilationPhase.java:486) at jdk.nashorn.internal.codegen.CompilationPhase.apply(CompilationPhase.java:728) at jdk.nashorn.internal.codegen.Compiler.compile(Compiler.java:620) at jdk.nashorn.internal.runtime.Context.compile(Context.java:1276) at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1213) at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:628) at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:523) at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:512) at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:400) at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) at com.sun.tools.script.shell.Main.evaluateString(Main.java:298) at com.sun.tools.script.shell.Main.processSource(Main.java:267) at com.sun.tools.script.shell.Main.access$100(Main.java:37) at com.sun.tools.script.shell.Main$1.run(Main.java:183) at com.sun.tools.script.shell.Main.main(Main.java:48) Caused by: java.lang.ArrayIndexOutOfBoundsException: -1 at jdk.nashorn.internal.codegen.Label$Stack.pop(Label.java:300) at jdk.nashorn.internal.codegen.MethodEmitter.popType(MethodEmitter.java:279) at jdk.nashorn.internal.codegen.MethodEmitter.pop(MethodEmitter.java:502) at jdk.nashorn.internal.codegen.CodeGenerator.loadAND_OR(CodeGenerator.java:3808) at jdk.nashorn.internal.codegen.CodeGenerator.access$3300(CodeGenerator.java:181) at jdk.nashorn.internal.codegen.CodeGenerator$1.enterAND(CodeGenerator.java:1089) at jdk.nashorn.internal.ir.visitor.NodeOperatorVisitor.enterBinaryNode(NodeOperatorVisitor.java:111) at jdk.nashorn.internal.ir.BinaryNode.accept(BinaryNode.java:339) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(CodeGenerator.java:861) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(CodeGenerator.java:837) at jdk.nashorn.internal.codegen.CodeGenerator.loadAndDiscard(CodeGenerator.java:3678) at jdk.nashorn.internal.codegen.CodeGenerator.loadMaybeDiscard(CodeGenerator.java:3707) at jdk.nashorn.internal.codegen.CodeGenerator.loadMaybeDiscard(CodeGenerator.java:3694) at jdk.nashorn.internal.codegen.CodeGenerator.loadCOMMARIGHT(CodeGenerator.java:4128) at jdk.nashorn.internal.codegen.CodeGenerator.access$3200(CodeGenerator.java:181) at jdk.nashorn.internal.codegen.CodeGenerator$1.enterCOMMARIGHT(CodeGenerator.java:1083) at jdk.nashorn.internal.ir.visitor.NodeOperatorVisitor.enterBinaryNode(NodeOperatorVisitor.java:145) at jdk.nashorn.internal.ir.BinaryNode.accept(BinaryNode.java:339) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(CodeGenerator.java:861) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(CodeGenerator.java:837) at jdk.nashorn.internal.codegen.CodeGenerator.loadAndDiscard(CodeGenerator.java:3678) at jdk.nashorn.internal.codegen.CodeGenerator.loadCOMMARIGHT(CodeGenerator.java:4127) at jdk.nashorn.internal.codegen.CodeGenerator.access$3200(CodeGenerator.java:181) at jdk.nashorn.internal.codegen.CodeGenerator$1.enterCOMMARIGHT(CodeGenerator.java:1083) at jdk.nashorn.internal.ir.visitor.NodeOperatorVisitor.enterBinaryNode(NodeOperatorVisitor.java:145) at jdk.nashorn.internal.ir.BinaryNode.accept(BinaryNode.java:339) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(CodeGenerator.java:861) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(CodeGenerator.java:837) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpressionAsBoolean(CodeGenerator.java:580) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpressionAsType(CodeGenerator.java:826) at jdk.nashorn.internal.codegen.CodeGenerator$14.evaluate(CodeGenerator.java:3885) at jdk.nashorn.internal.codegen.CodeGenerator$Store.store(CodeGenerator.java:4502) at jdk.nashorn.internal.codegen.CodeGenerator.loadASSIGN(CodeGenerator.java:3887) at jdk.nashorn.internal.codegen.CodeGenerator.access$800(CodeGenerator.java:181) at jdk.nashorn.internal.codegen.CodeGenerator$1.enterASSIGN(CodeGenerator.java:923) at jdk.nashorn.internal.ir.visitor.NodeOperatorVisitor.enterBinaryNode(NodeOperatorVisitor.java:113) at jdk.nashorn.internal.ir.BinaryNode.accept(BinaryNode.java:339) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(CodeGenerator.java:861) at jdk.nashorn.internal.codegen.CodeGenerator.loadExpression(CodeGenerator.java:837) at jdk.nashorn.internal.codegen.CodeGenerator.loadAndDiscard(CodeGenerator.java:3678) at jdk.nashorn.internal.codegen.CodeGenerator.enterExpressionStatement(CodeGenerator.java:1732) at jdk.nashorn.internal.ir.ExpressionStatement.accept(ExpressionStatement.java:63) at jdk.nashorn.internal.ir.Node.accept(Node.java:261) at jdk.nashorn.internal.ir.Block.accept(Block.java:154) at jdk.nashorn.internal.ir.LexicalContextNode$Acceptor.accept(LexicalContextNode.java:57) at jdk.nashorn.internal.ir.Block.accept(Block.java:409) at jdk.nashorn.internal.ir.FunctionNode.accept(FunctionNode.java:374) at jdk.nashorn.internal.ir.LexicalContextNode$Acceptor.accept(LexicalContextNode.java:57) at jdk.nashorn.internal.ir.LexicalContextExpression.accept(LexicalContextExpression.java:47) at jdk.nashorn.internal.ir.FunctionNode.accept(FunctionNode.java:57) at jdk.nashorn.internal.codegen.CompilationPhase.transformFunction(CompilationPhase.java:732) at jdk.nashorn.internal.codegen.CompilationPhase.access$100(CompilationPhase.java:69) at jdk.nashorn.internal.codegen.CompilationPhase$13.transform(CompilationPhase.java:473) ... 15 more jf
