groovy-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GROOVY-7926) Method that returns void in a Trait with generics produces questionable byte code
Date Fri, 09 Sep 2016 15:53:21 GMT

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

ASF GitHub Bot commented on GROOVY-7926:
----------------------------------------

Github user jwagenleitner commented on a diff in the pull request:

    https://github.com/apache/groovy/pull/416#discussion_r78203740
  
    --- Diff: src/test/org/codehaus/groovy/transform/traitx/Groovy7926Bug.groovy ---
    @@ -0,0 +1,50 @@
    +package org.codehaus.groovy.transform.traitx
    +
    +import org.codehaus.groovy.classgen.asm.AbstractBytecodeTestCase
    +import org.codehaus.groovy.classgen.asm.InstructionSequence
    +
    +/**
    + * Created by graemerocher on 08/09/2016.
    + */
    +class Groovy7926Bug extends AbstractBytecodeTestCase {
    --- End diff --
    
    Would probably be good to remove the class doc and add the license header.


> Method that returns void in a Trait with generics produces questionable byte code
> ---------------------------------------------------------------------------------
>
>                 Key: GROOVY-7926
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7926
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.4.7
>            Reporter: Graeme Rocher
>
> Given the following trait:
> {code}
> trait MyTrait<D> {
>     void delete() {
>         // no-op
>     }
> }
> class MyImpl implements MyTrait<MyImpl> {
> }
> {code}
> The delete method produces byte code that when decompiled looks like:
> {code}
>     public void delete() {
>         CallSite[] var1 = $getCallSiteArray();
>         void var10000 = (void)var1[1].call(Helper.class, this);
>     }
> {code}
> As you can see "void" is used as a type of a variable. This results in the following
exception on the IBM JVM (it works fine in Oracle and OpenJDK):
> {code}
> Caused by: java.lang.NoClassDefFoundError: void
> 	at it.dedagroup.Test.delete(Test.groovy)
> 	at org.grails.datastore.gorm.GormEntity$delete$0.call(Unknown Source)
> 	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
> {code}
> Since the issue occurs only in IBM JVM it could be argued that this is a problem with
that JVM, however the byte code produced does seem suspicious to me as "void" cannot be used
as a type of a local variable. Thoughts?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message