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 04:15:05 UTC 2018


On 14/02/2018 1:52 PM, Ioi Lam wrote:
> There is one set of braces for each method. This is pretty common in the 
> HotSpot tests. E.g.
> 
> http://hg.openjdk.java.net/jdk/hs/file/e0d3be81da47/test/hotspot/jtreg/runtime/BootstrapMethod/BSMCalledTwice.java#l128 

I suspect most of these were written by the same person and then copied 
as examples.

It is a very odd style to me.

> So we should leave the braces and indentation as is.

Ok. Not worth arguing over. :)

David

> Thanks
> 
> - Ioi
> 
> 
> 
> On 2/13/18 7:21 PM, David Holmes wrote:
>> 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