Nikolay Chashnikov created GROOVY-10457:
-------------------------------------------
Summary: Compilation of constructor calls inside CompileDynamic
constructors fails with ArrayIndexOutOfBoundsException
Key: GROOVY-10457
URL: https://issues.apache.org/jira/browse/GROOVY-10457
Project: Groovy
Issue Type: Bug
Components: Compiler
Affects Versions: 3.0.8
Reporter: Nikolay Chashnikov
Try compiling the following code using Groovy 3.0.9:
{code:groovy}
import groovy.transform.CompileDynamic
import groovy.transform.CompileStatic
@CompileStatic
class MyConstructorBug {
@CompileDynamic
MyConstructorBug() {
StringReader reader = new StringReader("abc")
}
}
{code}
It'll fail with the following exception:
{noformat}
java.lang.ArrayIndexOutOfBoundsException: size==0
at
org.codehaus.groovy.classgen.asm.OperandStack.ensureStackNotEmpty(OperandStack.java:279)
at
org.codehaus.groovy.classgen.asm.OperandStack.getTopOperand(OperandStack.java:646)
at
org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateEqual(BinaryExpressionHelper.java:400)
at
org.codehaus.groovy.classgen.asm.sc.StaticTypesBinaryExpressionMultiTypeDispatcher.evaluateEqual(StaticTypesBinaryExpressionMultiTypeDispatcher.java:202)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitDeclarationExpression(AsmClassGenerator.java:702)
at
org.codehaus.groovy.ast.expr.DeclarationExpression.visit(DeclarationExpression.java:89)
at
org.codehaus.groovy.classgen.asm.StatementWriter.writeExpressionStatement(StatementWriter.java:635)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitExpressionStatement(AsmClassGenerator.java:687)
at
org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
at
org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94)
at
org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:618)
at
org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:462)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:409)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructor(ClassCodeVisitorSupport.java:101)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructor(AsmClassGenerator.java:551)
at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1089)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
at
org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:272)
at
org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797)
at
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942)
at
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671)
at
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635)
at
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:610)
{noformat}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)