Spurious NPE in guardWithTest

Rémi Forax forax at univ-mlv.fr
Tue Dec 14 11:12:29 PST 2010


On 12/14/2010 06:10 PM, Christian Thalinger wrote:
> On Dec 14, 2010, at 6:02 PM, Rémi Forax wrote:
>> With the jdk7b121, sometimes when I call a MH created with guardWith, it
>> get a NPE because the target is NULL :(
>>
>> groovy examples/mixin.groovy
>>
>> java.lang.NullPointerException
>>      at
>> sun.dyn.MethodHandleImpl$GuardWithTest.invoke_L1(MethodHandleImpl.java:963)
>>      at java.dyn.MethodHandle.invokeVarargs(MethodHandle.java:336)
>>      at org.codehaus.groovy2.lang.MOPLinker.fallback(MOPLinker.java:145)
>>      at sun.dyn.FilterGeneric$F1.invoke_C0(FilterGeneric.java:516)
>>      at mixin.run(Unknown Source)
>>      at
>> groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:264)
>>      at groovy.lang.GroovyShell.run(GroovyShell.java:227)
>>      at groovy.lang.GroovyShell.run(GroovyShell.java:157)
>>      at groovy.ui.GroovyMain.processOnce(GroovyMain.java:496)
>>      at groovy.ui.GroovyMain.run(GroovyMain.java:311)
>>      at groovy.ui.GroovyMain.process(GroovyMain.java:297)
>>      at groovy.ui.GroovyMain.processArgs(GroovyMain.java:112)
>>      at groovy.ui.GroovyMain.main(GroovyMain.java:93)
>> Caught: java.lang.NullPointerException
>>
>> Because MHs.guardWithTest() explicitly test that the target is not null,
>> I think there is a bug somewhere in the VM.
> Does it also happen with -Xint?  Or C1?  I guess you're using C2.

Xint => same problem
I use C2 on a 64bits VM, I could reproduce it with C2 using a 32bits VM
but not with C1 (32bits VM).

>> Step to reproduce:
>> download Gru: http://www-igm.univ-mlv.fr/~forax/tmp/Gru.tgz
>>
>> run: groovy examples/mixin.groovy
>>
>> It should print some bytecodes and "groovy yai" ...
>> if there is no NPE.
> I will have a look.
>
>> Rémi
>> PS: yes, Gru a prototype of groovy on top of JSR292 :)
> Nice!
>
> -- Christian

Rémi


More information about the mlvm-dev mailing list