Björn Kautler created GROOVY-12453:
--------------------------------------
Summary: {{ArrayIndexOutOfBoundsException}} during compilation
with an assert and map-constructor-call
Key: GROOVY-12453
URL: https://issues.apache.org/jira/browse/GROOVY-12453
Project: Groovy
Issue Type: Bug
Affects Versions: 6.0.0
Reporter: Björn Kautler
Given the snippet
{code:groovy}
class Person2 {
def name
def age
}
@groovy.transform.CompileStatic
def foo() {
def fred = "fred"
def fredsAge = 25
assert new Person2([name: fred, age: fredsAge])
}
foo() {code}
If you compile it in Groovy Web Console with Groovy up to 5.1, everything is
fine.
If you switch to Groovy 6, you get this exception:
{code}
Unable to produce AST for this phase due to earlier compilation error:
startup failed:
General error during instruction selection: size==0
java.lang.ArrayIndexOutOfBoundsException: size==0
at
org.codehaus.groovy.classgen.asm.OperandStack.ensureStackNotEmpty(OperandStack.java:310)
at
org.codehaus.groovy.classgen.asm.OperandStack.getTopOperand(OperandStack.java:700)
at
org.codehaus.groovy.classgen.asm.OperandStack.dup(OperandStack.java:213)
at
org.codehaus.groovy.classgen.asm.AssertionWriter.record(AssertionWriter.java:291)
at
org.codehaus.groovy.classgen.asm.AssertionWriter.record(AssertionWriter.java:284)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitMethodCallExpression(AsmClassGenerator.java:1245)
at
org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:103)
at
org.codehaus.groovy.classgen.asm.sc.StaticTypesBinaryExpressionMultiTypeDispatcher.makeSetProperty(StaticTypesBinaryExpressionMultiTypeDispatcher.java:338)
at
org.codehaus.groovy.classgen.asm.sc.StaticTypesBinaryExpressionMultiTypeDispatcher.evaluateEqual(StaticTypesBinaryExpressionMultiTypeDispatcher.java:227)
at
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:224)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:1019)
at
org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:80)
at
org.codehaus.groovy.transform.sc.transformers.ConstructorCallTransformer$MapStyleConstructorCall.visit(ConstructorCallTransformer.java:183)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitBytecodeExpression(AsmClassGenerator.java:2255)
at
org.codehaus.groovy.classgen.BytecodeExpression.visit(BytecodeExpression.java:80)
at
org.codehaus.groovy.transform.sc.transformers.ConstructorCallTransformer$MapStyleConstructorCall.visit(ConstructorCallTransformer.java:141)
at
org.codehaus.groovy.transform.sc.transformers.BooleanExpressionTransformer$OptimizingBooleanExpression.visit(BooleanExpressionTransformer.java:129)
at
org.codehaus.groovy.classgen.asm.AssertionWriter.writeAssertStatement(AssertionWriter.java:123)
at
org.codehaus.groovy.classgen.asm.StatementWriter.writeAssert(StatementWriter.java:878)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitAssertStatement(AsmClassGenerator.java:891)
at
org.codehaus.groovy.ast.stmt.AssertStatement.visit(AssertStatement.java:67)
at
org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:151)
at
org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:91)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:851)
at
org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:84)
at
org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:151)
at
org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:91)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:851)
at
org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:84)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:693)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:626)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:181)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:782)
at org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1851)
at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1837)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:89)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:431)
at
org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:876)
at
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:1097)
at
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:764)
at
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:738)
at
spock.util.SourceToAstNodeAndSourceTranspiler.compileScript(SourceToAstNodeAndSourceTranspiler.groovy:93)
at
spock.util.EmbeddedSpecCompiler.doTranspile(EmbeddedSpecCompiler.groovy:162)
at
spock.util.EmbeddedSpecCompiler.doTranspile(EmbeddedSpecCompiler.groovy)
at
spock.util.EmbeddedSpecCompiler.transpile(EmbeddedSpecCompiler.groovy:157)
at gwc.spock.AstRenderer.render(AstRenderer.java:14)
at gwc.spock.SpockSpecSupport.renderAst(SpockSpecSupport.java:22)
at gwc.GFunctionExecutor.handleRealInvocation(GFunctionExecutor.java:97)
at gwc.GFunctionExecutor.service(GFunctionExecutor.java:66)
at
com.google.cloud.functions.invoker.HttpFunctionExecutor.handle(HttpFunctionExecutor.java:78)
at org.eclipse.jetty.server.Handler$Wrapper.handle(Handler.java:794)
at
com.google.cloud.functions.invoker.http.TimeoutHandler.handle(TimeoutHandler.java:52)
at
org.eclipse.jetty.server.handler.EagerContentHandler.onConditionsMet(EagerContentHandler.java:155)
at
org.eclipse.jetty.server.handler.ConditionalHandler.handle(ConditionalHandler.java:378)
at org.eclipse.jetty.server.Handler$Wrapper.handle(Handler.java:794)
at
com.google.cloud.functions.invoker.runner.Invoker$NotFoundHandler.handle(Invoker.java:498)
at org.eclipse.jetty.server.Server.handle(Server.java:197)
at
org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:788)
at
org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:420)
at
org.eclipse.jetty.server.internal.HttpConnection$FillableCallback.succeeded(HttpConnection.java:1809)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at
org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54)
at
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:492)
at
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.epcRunTask(AdaptiveExecutionStrategy.java:428)
at
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:401)
at
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:255)
at
org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204)
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:317)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1240)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194)
at java.base/java.lang.Thread.run(Thread.java:1583)
1 error{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)