Björn Kautler created GROOVY-12473:
--------------------------------------

             Summary: SC: static compilation in some situation prefers boolean 
getter over static field and produces cast exception
                 Key: GROOVY-12473
                 URL: https://issues.apache.org/jira/browse/GROOVY-12473
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 6.0.0, 5.1.3, 4.0.33, 5.0.3, 3.0.25, 2.5.23
            Reporter: Björn Kautler


Given this snippet:
{code:groovy}
@groovy.transform.CompileStatic
def foo() {
  (Float as Class<Float>).NaN
}
foo().toString()
{code}
It fails at runtime with a class-cast exception, because static compilation 
decides it would be a good idea to interpret the {{NaN}} not as the static 
field, but as {{isNaN()}} call, casting the {{Class<FLoat>}} to {{Float}} which 
fails of course.

(This might seem like forged example, of course you would usually do 
{{Float.NaN}} which works. Nevertheless it should work and not produce cast 
exception, and if you use {{Float.NaN}} in a Spock assertion with a 
SC-optimized Spock, you get exactly that cast exception)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to