You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2022/05/18 21:52:00 UTC

[jira] [Resolved] (GROOVY-10092) Compiler crash when trying to cast a boolean to float variable

     [ https://issues.apache.org/jira/browse/GROOVY-10092?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Eric Milles resolved GROOVY-10092.
----------------------------------
    Fix Version/s: 5.0.0-alpha-1
       Resolution: Fixed

https://github.com/apache/groovy/commit/d4a0cbc6d9e6b9906b32e6afae37a61cb0147fd6

> 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, Static Type Checker
>    Affects Versions: 4.0.0-alpha-2, 3.0.8
>            Reporter: Stefanos Chaliasos
>            Priority: Major
>             Fix For: 5.0.0-alpha-1
>
>
> 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.20.7#820007)