Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
5.0.0-alpha-8, 4.0.21
-
None
Description
For this code:
@groovy.transform.CompileStatic def method() { var temp = 'foo' temp = temp.size() assert temp ** temp == 27 } method()
The compiler gives this error:
BUG! exception in phase 'class generation' in source unit 'ConsoleScript3' At line 10 column 8 On receiver: temp with message: power and arguments: temp This method should not have been called. Please try to create a simple example reproducing this error and file a bug report at https://issues.apache.org/jira/browse/GROOVY at org.codehaus.groovy.classgen.asm.sc.StaticTypesCallSiteWriter.makeSingleArgumentCall(StaticTypesCallSiteWriter.java:582) at org.codehaus.groovy.classgen.asm.InvocationWriter.makeSingleArgumentCall(InvocationWriter.java:626) at org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.evaluateBinaryExpression(BinaryExpressionHelper.java:602) at org.codehaus.groovy.classgen.asm.BinaryExpressionMultiTypeDispatcher.evaluateBinaryExpression(BinaryExpressionMultiTypeDispatcher.java:242) at org.codehaus.groovy.classgen.asm.BinaryExpressionHelper.eval(BinaryExpressionHelper.java:264) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBinaryExpression(AsmClassGenerator.java:849) ...
We apply flow typing for the receiver but not the argument type. This looks like a case that should be handled where we currently have "TODO: more cases ..." in StaticTypesCallSiteWriter.
The same situation occurs for the shift operators and plus etc., e.g.:
assert temp << temp == 24 assert temp + temp == 6