[
https://issues.apache.org/jira/browse/GROOVY-12453?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Björn Kautler updated GROOVY-12453:
-----------------------------------
Summary: ArrayIndexOutOfBoundsException during compilation with an assert
and map-constructor-call (was: {{ArrayIndexOutOfBoundsException}} during
compilation with an assert and map-constructor-call)
> 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
> Priority: Major
>
> 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)