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)