You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (JIRA)" <ji...@apache.org> on 2018/12/18 11:19:00 UTC

[jira] [Comment Edited] (GROOVY-8930) JVM verification fails when using static interface method from inside CompileStatic groovy

    [ https://issues.apache.org/jira/browse/GROOVY-8930?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16723953#comment-16723953 ] 

Paul King edited comment on GROOVY-8930 at 12/18/18 11:18 AM:
--------------------------------------------------------------

This doesn't fail on 3.0.0-alpha-3, so compiling this file using that version of Groovy would be your workaround until we fix this. The other workaround is to use the {{-Dgroovy.target.bytecode=1.8}} commandline switch for {{groovy}}/{{groovyc}}/{{groovyconsole}}.

3.0.0-alpha-3 produces identical bytecode to 2.5.4 (and current 2.5.5-SNAPSHOT) for the {{doCall}} method and an identical constant pool. The only difference is that 2.5.x leaves the bytecode level at 51 (JDK7) whereas 3.0.x uses level 52 (JDK8) which is required for the InterfaceMethodref we are currently using to point to that static interface method.


was (Author: paulk):
This doesn't fail on 3.0.0-alpha-3, so compiling this file using that version of Groovy would be your workaround until we fix this.

3.0.0-alpha-3 produces identical bytecode to 2.5.4 (and current 2.5.5-SNAPSHOT) for the {{doCall}} method and an identical constant pool. The only difference is that 2.5.x leaves the bytecode level at 51 (JDK7) whereas 3.0.x uses level 52 (JDK8) which is required for the InterfaceMethodref we are currently using to point to that static interface method.

> JVM verification fails when using static interface method from inside CompileStatic groovy
> ------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-8930
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8930
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.5.4
>            Reporter: Artsiom Matronkin
>            Priority: Major
>         Attachments: Caller.groovy, JavaInterface.class, JavaInterface.java
>
>
> Create and compile java interface containing static method using JDK8
> {code:java}
> public interface JavaInterface
> {
>   static int doSmth()
>   {
>     return 42;
>   }
> }
> {code}
>  javac JavaInterface.java
>  
> Open groovyConsole (2.5.4), add folder where JavaInterface.class is located to classpath, check 'Enable indy compilation' and paste following script
>  
> {code}
> import groovy.transform.CompileStatic
> import static JavaInterface.doSmth
> @CompileStatic
> void doCall()
> {
>   println doSmth()
> }
> {code}
>  
>  
> Compile and Run the script in groovyConsole. The result is JVM verification failure:
> {noformat}
> java.lang.VerifyError: Illegal type at constant pool entry 51 in class Caller
> Exception Details:
> Location:
> Caller.doCall()V @4: invokestatic
> Reason:
> Constant pool index 51 is invalid{noformat}
> Best Regards
> Artsiom
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)