You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by Alexei Fedotov <al...@gmail.com> on 2007/03/16 13:58:04 UTC

[verifier] question about RI behavior

Mikhail, folks,
Let me attract a collective Harmony brain to the problem. Does anyone
have any idea why the following code doesn't pass verification on RI?

Thanks, Alexei

.class public SubSub
.super java/lang/Object
.method public <init>()V
    aload_0
    invokespecial java/lang/Object/<init>()V
    return
.end method

;
; Subroutine is called from the other subroutine and
; from the top level code.
;
.method public static main([Ljava/lang/String;)V
    .limit stack 1
    .limit locals 2

    jsr LabelSub
    jsr LabelSubSub
    return
LabelSub:
    astore 1
    jsr LabelSubSub
    ret 1
LabelSubSub:
    astore 0
    ret 0
.end method


$ java -jar c:/bin/jasmin-1.1/jasmin.jar SubSub.jj
Generated: SubSub.class
$ java -cp . SubSub
java.lang.VerifyError: (class: SubSub, method: testSubSub signature:
()V) Illegal return from subroutine
$


-- 
With best regards,
Alexei,
ESSD, Intel

Re: [verifier] question about RI behavior

Posted by Alexei Fedotov <al...@gmail.com>.
Hello,
Mikhail, Egor, Pavel,

Thank you for sharing your opinions. This really helps to keep things
in order. BTW, I never tried to use J9 as RI for a verifier, and this
is a good idea indeed.

With best wishes, Alexei

On 3/19/07, Pavel Ozhdikhin <pa...@gmail.com> wrote:
> On 3/19/07, Mikhail Loenko <ml...@gmail.com> wrote:
> >
> > I tried it.
> >
> > JRockit prints the same error as RI, but J9 digests it fine.
> > Harmony JIT fires an assertion.
> >
> > Hi JIT folks, would you share your vision whether this class correct or
> > not?
>
>
>
>  To my best knowledge the test does not violate the VM spec.
>
> It looks like we have a bug in Jitrino.JET which fails to compile this test.
> Jitrino.OPT and interpreter successfully pass it.
>
> If RI has a bug in their verifier then the DRLVM is "allowed" to have this
> bug in the verifier as well. :) However, if we use '-noverify' option RI
> passes the test, so we still need to fix Jitrino.JET to avoid the crash.
>
> Thank you,
> Pavel
>
>
> Thanks,
> > Mikhail
> >
> > 2007/3/19, Mikhail Loenko <ml...@gmail.com>:
> > > 16 Mar 2007 16:05:18 +0300, Egor Pasko <eg...@gmail.com>:
> > > > On the 0x29B day of Apache Harmony Alexei Fedotov wrote:
> > > > > Mikhail, folks,
> > > > > Let me attract a collective Harmony brain to the problem. Does
> > anyone
> > > > > have any idea why the following code doesn't pass verification on
> > RI?
> > > >
> > > > looks like a bug :)
> > >
> > > Agreed
> > >
> > > BTW, how other VMs behave? JRockit, J9?
> > >
> > > Thanks,
> > > Mikhail
> > >
> > > >
> > > > > Thanks, Alexei
> > > > >
> > > > > .class public SubSub
> > > > > .super java/lang/Object
> > > > > .method public <init>()V
> > > > >     aload_0
> > > > >     invokespecial java/lang/Object/<init>()V
> > > > >     return
> > > > > .end method
> > > > >
> > > > > ;
> > > > > ; Subroutine is called from the other subroutine and
> > > > > ; from the top level code.
> > > > > ;
> > > > > .method public static main([Ljava/lang/String;)V
> > > > >     .limit stack 1
> > > > >     .limit locals 2
> > > > >
> > > > >     jsr LabelSub
> > > > >     jsr LabelSubSub
> > > > >     return
> > > > > LabelSub:
> > > > >     astore 1
> > > > >     jsr LabelSubSub
> > > > >     ret 1
> > > > > LabelSubSub:
> > > > >     astore 0
> > > > >     ret 0
> > > > > .end method
> > > > >
> > > > >
> > > > > $ java -jar c:/bin/jasmin-1.1/jasmin.jar SubSub.jj
> > > > > Generated: SubSub.class
> > > > > $ java -cp . SubSub
> > > > > java.lang.VerifyError: (class: SubSub, method: testSubSub signature:
> > > > > ()V) Illegal return from subroutine
> > > > > $
> > > > >
> > > > >
> > > > > --
> > > > > With best regards,
> > > > > Alexei,
> > > > > ESSD, Intel
> > > > >
> > > >
> > > > --
> > > > Egor Pasko
> > > >
> > > >
> > >
> >
>


-- 
With best regards,
Alexei,
ESSD, Intel

Re: [verifier] question about RI behavior

Posted by Pavel Ozhdikhin <pa...@gmail.com>.
On 3/19/07, Mikhail Loenko <ml...@gmail.com> wrote:
>
> I tried it.
>
> JRockit prints the same error as RI, but J9 digests it fine.
> Harmony JIT fires an assertion.
>
> Hi JIT folks, would you share your vision whether this class correct or
> not?



 To my best knowledge the test does not violate the VM spec.

It looks like we have a bug in Jitrino.JET which fails to compile this test.
Jitrino.OPT and interpreter successfully pass it.

If RI has a bug in their verifier then the DRLVM is "allowed" to have this
bug in the verifier as well. :) However, if we use '-noverify' option RI
passes the test, so we still need to fix Jitrino.JET to avoid the crash.

Thank you,
Pavel


Thanks,
> Mikhail
>
> 2007/3/19, Mikhail Loenko <ml...@gmail.com>:
> > 16 Mar 2007 16:05:18 +0300, Egor Pasko <eg...@gmail.com>:
> > > On the 0x29B day of Apache Harmony Alexei Fedotov wrote:
> > > > Mikhail, folks,
> > > > Let me attract a collective Harmony brain to the problem. Does
> anyone
> > > > have any idea why the following code doesn't pass verification on
> RI?
> > >
> > > looks like a bug :)
> >
> > Agreed
> >
> > BTW, how other VMs behave? JRockit, J9?
> >
> > Thanks,
> > Mikhail
> >
> > >
> > > > Thanks, Alexei
> > > >
> > > > .class public SubSub
> > > > .super java/lang/Object
> > > > .method public <init>()V
> > > >     aload_0
> > > >     invokespecial java/lang/Object/<init>()V
> > > >     return
> > > > .end method
> > > >
> > > > ;
> > > > ; Subroutine is called from the other subroutine and
> > > > ; from the top level code.
> > > > ;
> > > > .method public static main([Ljava/lang/String;)V
> > > >     .limit stack 1
> > > >     .limit locals 2
> > > >
> > > >     jsr LabelSub
> > > >     jsr LabelSubSub
> > > >     return
> > > > LabelSub:
> > > >     astore 1
> > > >     jsr LabelSubSub
> > > >     ret 1
> > > > LabelSubSub:
> > > >     astore 0
> > > >     ret 0
> > > > .end method
> > > >
> > > >
> > > > $ java -jar c:/bin/jasmin-1.1/jasmin.jar SubSub.jj
> > > > Generated: SubSub.class
> > > > $ java -cp . SubSub
> > > > java.lang.VerifyError: (class: SubSub, method: testSubSub signature:
> > > > ()V) Illegal return from subroutine
> > > > $
> > > >
> > > >
> > > > --
> > > > With best regards,
> > > > Alexei,
> > > > ESSD, Intel
> > > >
> > >
> > > --
> > > Egor Pasko
> > >
> > >
> >
>

Re: [verifier] question about RI behavior

Posted by Mikhail Loenko <ml...@gmail.com>.
I tried it.

JRockit prints the same error as RI, but J9 digests it fine.
Harmony JIT fires an assertion.

Hi JIT folks, would you share your vision whether this class correct or not?

Thanks,
Mikhail

2007/3/19, Mikhail Loenko <ml...@gmail.com>:
> 16 Mar 2007 16:05:18 +0300, Egor Pasko <eg...@gmail.com>:
> > On the 0x29B day of Apache Harmony Alexei Fedotov wrote:
> > > Mikhail, folks,
> > > Let me attract a collective Harmony brain to the problem. Does anyone
> > > have any idea why the following code doesn't pass verification on RI?
> >
> > looks like a bug :)
>
> Agreed
>
> BTW, how other VMs behave? JRockit, J9?
>
> Thanks,
> Mikhail
>
> >
> > > Thanks, Alexei
> > >
> > > .class public SubSub
> > > .super java/lang/Object
> > > .method public <init>()V
> > >     aload_0
> > >     invokespecial java/lang/Object/<init>()V
> > >     return
> > > .end method
> > >
> > > ;
> > > ; Subroutine is called from the other subroutine and
> > > ; from the top level code.
> > > ;
> > > .method public static main([Ljava/lang/String;)V
> > >     .limit stack 1
> > >     .limit locals 2
> > >
> > >     jsr LabelSub
> > >     jsr LabelSubSub
> > >     return
> > > LabelSub:
> > >     astore 1
> > >     jsr LabelSubSub
> > >     ret 1
> > > LabelSubSub:
> > >     astore 0
> > >     ret 0
> > > .end method
> > >
> > >
> > > $ java -jar c:/bin/jasmin-1.1/jasmin.jar SubSub.jj
> > > Generated: SubSub.class
> > > $ java -cp . SubSub
> > > java.lang.VerifyError: (class: SubSub, method: testSubSub signature:
> > > ()V) Illegal return from subroutine
> > > $
> > >
> > >
> > > --
> > > With best regards,
> > > Alexei,
> > > ESSD, Intel
> > >
> >
> > --
> > Egor Pasko
> >
> >
>

Re: [verifier] question about RI behavior

Posted by Mikhail Loenko <ml...@gmail.com>.
16 Mar 2007 16:05:18 +0300, Egor Pasko <eg...@gmail.com>:
> On the 0x29B day of Apache Harmony Alexei Fedotov wrote:
> > Mikhail, folks,
> > Let me attract a collective Harmony brain to the problem. Does anyone
> > have any idea why the following code doesn't pass verification on RI?
>
> looks like a bug :)

Agreed

BTW, how other VMs behave? JRockit, J9?

Thanks,
Mikhail

>
> > Thanks, Alexei
> >
> > .class public SubSub
> > .super java/lang/Object
> > .method public <init>()V
> >     aload_0
> >     invokespecial java/lang/Object/<init>()V
> >     return
> > .end method
> >
> > ;
> > ; Subroutine is called from the other subroutine and
> > ; from the top level code.
> > ;
> > .method public static main([Ljava/lang/String;)V
> >     .limit stack 1
> >     .limit locals 2
> >
> >     jsr LabelSub
> >     jsr LabelSubSub
> >     return
> > LabelSub:
> >     astore 1
> >     jsr LabelSubSub
> >     ret 1
> > LabelSubSub:
> >     astore 0
> >     ret 0
> > .end method
> >
> >
> > $ java -jar c:/bin/jasmin-1.1/jasmin.jar SubSub.jj
> > Generated: SubSub.class
> > $ java -cp . SubSub
> > java.lang.VerifyError: (class: SubSub, method: testSubSub signature:
> > ()V) Illegal return from subroutine
> > $
> >
> >
> > --
> > With best regards,
> > Alexei,
> > ESSD, Intel
> >
>
> --
> Egor Pasko
>
>

Re: [verifier] question about RI behavior

Posted by Egor Pasko <eg...@gmail.com>.
On the 0x29B day of Apache Harmony Alexei Fedotov wrote:
> Mikhail, folks,
> Let me attract a collective Harmony brain to the problem. Does anyone
> have any idea why the following code doesn't pass verification on RI?

looks like a bug :)

> Thanks, Alexei
> 
> .class public SubSub
> .super java/lang/Object
> .method public <init>()V
>     aload_0
>     invokespecial java/lang/Object/<init>()V
>     return
> .end method
> 
> ;
> ; Subroutine is called from the other subroutine and
> ; from the top level code.
> ;
> .method public static main([Ljava/lang/String;)V
>     .limit stack 1
>     .limit locals 2
> 
>     jsr LabelSub
>     jsr LabelSubSub
>     return
> LabelSub:
>     astore 1
>     jsr LabelSubSub
>     ret 1
> LabelSubSub:
>     astore 0
>     ret 0
> .end method
> 
> 
> $ java -jar c:/bin/jasmin-1.1/jasmin.jar SubSub.jj
> Generated: SubSub.class
> $ java -cp . SubSub
> java.lang.VerifyError: (class: SubSub, method: testSubSub signature:
> ()V) Illegal return from subroutine
> $
> 
> 
> -- 
> With best regards,
> Alexei,
> ESSD, Intel
> 

-- 
Egor Pasko