RFR(xs): 8196920: VerifierTest_1A.java and VerifierTest_1B.java fail: assert(receiver_klass->is_subtype_of(static_receiver_klass))

David Holmes david.holmes at oracle.com
Wed Feb 14 03:21:18 UTC 2018


On 14/02/2018 12:19 PM, Calvin Cheung wrote:
> On 2/13/18, 5:48 PM, David Holmes wrote:
>> Hi Calvin,
>>
>> Changes look good to me.
> Thanks for your review, David.
>>
>> Aside: why does this test have unnecessary {} scopes ??
> Not sure since I didn't write the original test. Perhaps they're there 
> for better code readability?
> I can replace them with blank lines like the following:
>>         cw.visit(V1_8, ACC_ABSTRACT + ACC_INTERFACE, 
>> "UnverifiableIntf", null, "java/lang/Object", null);
>>
>>             fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC, 
>> "x", "LVerifierTest0;", null, null);
>>             fv.visitEnd();
>>
>>             mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, 
>> null);
>>             mv.visitCode();
>>             mv.visitTypeInsn(NEW, "VerifierTest0");
>>             mv.visitInsn(DUP);
>>             mv.visitMethodInsn(INVOKESPECIAL, "VerifierTest0", 
>> "<init>", "()V", false);
>>             mv.visitFieldInsn(PUTSTATIC, "UnverifiableIntf", "x", 
>> "LVerifierTest0;");
>>             mv.visitInsn(RETURN);
>>             mv.visitMaxs(2, 0);
>>             mv.visitEnd();
>>
>>         addBadMethod(cw);
>>         cw.visitEnd();
> Do you prefer the above?

Sure - with indent fixed too of course. :)

But don't waste too much time on it.

Thanks,
David

> thanks,
> Calvin
> 
> 
>>
>> Thanks,
>> David
>>
>> On 14/02/2018 9:23 AM, Calvin Cheung wrote:
>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8196920
>>> (sorry, the bug was marked confidential)
>>>
>>> webrev: http://cr.openjdk.java.net/~ccheung/8196920/webrev.00/
>>> (the above change was suggested by Ioi)
>>>
>>> By design, the test created a unverifiable class:
>>>
>>> Expected exception:
>>> java.lang.VerifyError: Call to wrong <init> method
>>> Exception Details:
>>>    Location:
>>>      UnverifiableBase.<clinit>()V @4: invokespecial
>>>    Reason:
>>>      Type 'java/lang/Object' (constant pool 4) is not assignable to 
>>> 'VerifierTest0' (constant pool 14)
>>>
>>> Due to some recent changes, the test doesn't work with the following 
>>> vm options combination in hs-tier4 testing:
>>> -Xcomp -XX:-TieredCompilation -Xverify:none
>>> and resulting in assert in sharedRuntime.cpp:
>>> assert(receiver_klass->is_subtype_of(static_receiver_klass)) failed: 
>>> actual receiver must be subclass of static receiver klass
>>>
>>> A fix is to replace the above with a "bad" method which will never be 
>>> executed during runtime:
>>>
>>> Expected exception:
>>> java.lang.VerifyError: Operand stack underflow
>>> Exception Details:
>>>    Location:
>>>      UnverifiableBase.bad()V @0: areturn
>>>    Reason:
>>>      Attempt to pop empty stack.
>>>
>>> thanks,
>>> Calvin


More information about the hotspot-runtime-dev mailing list