Stefanos Chaliasos created GROOVY-10092:
-------------------------------------------

             Summary: Compiler crash when trying to cast a boolean to float 
variable
                 Key: GROOVY-10092
                 URL: https://issues.apache.org/jira/browse/GROOVY-10092
             Project: Groovy
          Issue Type: Bug
          Components: Static compilation
    Affects Versions: 3.0.8, 4.0.0-alpha-2
            Reporter: Stefanos Chaliasos


I have the following Groovy program.
{code:groovy}
@groovy.transform.CompileStatic
class Main {

  void foo() {
    float x = true
  }
}

{code}

h2. Actual Behavior

The compiler crashes, with the following stacktrace.
{code:java}
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during canonicalization: class java.lang.Boolean cannot be cast 
to class java.lang.Number (java.lang.Boolean and java.lang.Number are in module 
java.base of loader 'bootstrap')

java.lang.ClassCastException: class java.lang.Boolean cannot be cast to class 
java.lang.Number (java.lang.Boolean and java.lang.Number are in module 
java.base of loader 'bootstrap')
        at 
org.codehaus.groovy.transform.sc.transformers.BinaryExpressionTransformer.optimizeConstantInitialization(BinaryExpressionTransformer.java:368)
        at 
org.codehaus.groovy.transform.sc.transformers.BinaryExpressionTransformer.transformBinaryExpression(BinaryExpressionTransformer.java:107)
        at 
org.codehaus.groovy.transform.sc.transformers.StaticCompilationTransformer.transform(StaticCompilationTransformer.java:113)
        at 
org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:108)
        at 
org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:41)
        at 
org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86)
        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:164)
        at 
org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:70)
        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
        at 
org.codehaus.groovy.transform.sc.transformers.StaticCompilationTransformer.visitClassCodeContainer(StaticCompilationTransformer.java:104)
        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
        at 
org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:66)
        at 
org.codehaus.groovy.transform.sc.transformers.StaticCompilationTransformer.visitConstructorOrMethod(StaticCompilationTransformer.java:166)
        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
        at org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1110)
        at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1103)
        at 
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
        at 
org.codehaus.groovy.transform.sc.transformers.StaticCompilationTransformer.visitClass(StaticCompilationTransformer.java:153)
        at 
org.codehaus.groovy.transform.sc.StaticCompileTransformation.visit(StaticCompileTransformation.java:90)
        at 
org.codehaus.groovy.transform.ASTTransformationVisitor.visitClass(ASTTransformationVisitor.java:146)
        at 
org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperations$2(ASTTransformationVisitor.java:229)
        at 
org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:928)
        at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:657)
        at 
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:634)
        at 
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:609)
        at 
org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:311)
        at 
org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:240)
        at 
org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompile(FileSystemCompiler.java:165)
        at 
org.codehaus.groovy.tools.FileSystemCompiler.commandLineCompileWithErrorHandling(FileSystemCompiler.java:205)
        at 
org.codehaus.groovy.tools.FileSystemCompiler.main(FileSystemCompiler.java:189)

1 error


{code}
h2. Expected Behavior

Compile-time error.

h2. Comment

Note that if we use Typecheck instead of CompileStatic the program compiles 
without any error. 

h2. Affected Version

This programs fails when compiled with the compiler from the master (commit: 
e33e2849e247608c5e1826b76098d3a68d16bebf), 4.0.0-alpha-2, and 3.0.8.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to