RFR(XS) 8136632: VM format checking requires Code attribute from abstract/native non-initializer <clinit>
harold seigel
harold.seigel at oracle.com
Tue Sep 29 17:21:07 UTC 2015
Hi Lois,
Thanks for the review. I'll redo the alignment.
Harold
On 9/29/2015 10:59 AM, Lois Foltan wrote:
> Looks good. Picky nit, can you align the 2nd line of the if
> statement, the "s" in signature under the "n" in name?
> Thanks,
> Lois
> On 9/29/2015 9:49 AM, harold seigel wrote:
>> Hi,
>>
>> Please review this small change to fix bug 8136632. Section 2.9
>> <http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.9>
>> of the JVM 8 Spec says:
>>
>> A class or interface has at most one /class or interface
>> initialization method/ and is initialized (§5.5
>> <http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.5>)
>>
>> by invoking that method. The initialization method of a class or
>> interface has the special name |<clinit>|, takes no arguments, and
>> is void (§4.3.3
>> <http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.3>).
>>
>>
>>
>> Other methods named |<clinit>| in a |class| file are of no
>> consequence. They are not class or interface initialization methods.
>> They cannot be invoked by any Java Virtual Machine instruction and
>> are never invoked by the Java Virtual Machine itself.
>>
>> In a |class| file whose version number is 51.0 or above, the method
>> must additionally have its |ACC_STATIC| flag (§4.6
>> <http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.6>)
>>
>> set in order to be the class or interface initialization method.
>>
>> This fix avoids checking the access flags of methods named <clinit>
>> if they take arguments and/or are not void because such methods are
>> not class nor interface initialization methods.
>>
>> Open webrev: http://cr.openjdk.java.net/~hseigel/bug_8136632/
>>
>> JBS Bug: https://bugs.openjdk.java.net/browse/JDK-8136632
>>
>> The fix was tested with JCK Lang, VM, and API java_lang tests, the
>> UTE quick and split verifier tests, and the hotspot, JDK vm, java/io,
>> java/lang, and java/util JTreg tests, the JCK tests that are
>> currently excluded because of this bug, and the test cases in the bug
>> report.
>>
>> This scenario will be tested by JCK-9. So there's no regression test
>> in this webrev.
>>
>> Thanks, Harold
>
More information about the hotspot-runtime-dev
mailing list