RFR: 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
Daniel D. Daugherty
daniel.daugherty at oracle.com
Tue Jan 5 23:28:53 UTC 2016
On 12/21/15 11:52 AM, Yumin Qi wrote:
> Please review:
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8145148
> webrev:http://cr.openjdk.java.net/~minqi/8145148/webrev-01/
>
> This is REDO for bug 8087223, which was backed out due to failed on
> 8143317 and 8143320.
> The defmeth encoutered new failures after the fix, which now has
> correct constant tags. The test bugs will be addressed in 8143320,
> which based on vm/runtime/defmeth and 8143317, which in jdk/test.
>
> One difference from the attached for this webrev is that in
> MethodHandle resolution, I relax the check for one specific case:
> Using MethodHandle to invoke static default interface method. In this
> case, we must use invokestatic (JVM_REF_invokeStatic), which in
> defmeth it will generate method tag for interface which violates
> JVMS-5.4.3.3 (it should create interface method tag!). ASM currently
> has no API to generate invokeinterface for a interface static default
> method through MethodHandle invocation.
>
> Tests: JPRT, runtime quick test list (the fixed version for 8143320).
> Note the fix still fails 8143320 and 8143317 which are not fixed at
> the momment.
Are the failing tests quarantined? When this fix is pushed,
neither the "new" or "known" failures counts should increase.
Dan
>
>
> Thanks
> Yumin
>
>
> Original post:
> -----------------------------------------------------------------------------------------------------------------------------------------------------
>
> Please review:
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8087223
> webrev: http://cr.openjdk.java.net/~minqi/8087223/webrev-02/
>
> According to JVMS-8:
>
> JVMS-5.4.3.3 Method Resolution:
> " If C is an interface, method resolution throws an
> IncompatibleClassChangeError."
> JVMS-5.4.3.4 Interface Method Resolution:
> "If C is not an interface, interface method resolution throws an
> IncompatibleClassChangeError"
>
> When invoke a method with resolved to an interface method, or invoke a
> interface method with resolved to an instance method, ICCE should be
> thrown. The case usually happens when using tools like asmtools or
> jdk.internal.org.objectweb.asm to generate java bytecode.
>
> The fix is carrying the constantTag for the method at call and check
> if tag is consistent with the method called. Doing this by adding a
> member of constantTag, _tag, to LinkInfo, and check tag in resolve
> functions to see if tag matched with the correct method.
>
> The fix solved the problem when call is from interpreter and compiler,
> bug for MethodHandle invoke, which should be addressed in another
> bug, since the MethodHandle does not come with a byte stream and
> getting the constant pool index at the invoke is not possible. It
> will be addressed in another bug.
>
> Tests: test case (added, minor modified from bug), JPRT, rutime quick
> test list(in progress).
> manually tested: 1) -Xint
> 2) -Xcomp
> 3) -Xcomp -XX:-TieredCompiltion
> 4) -Xcomp -XX:+TieredCompilation
>
> Thanks to Coleen for helping fixed constant pool index and cleaned
> LinkInfo.
> ----------------------------------------------------------------------------------------------------------------------------------
>
>
> Second revision attached.
>
>
>
>
> Thanks
> Yumin
More information about the hotspot-runtime-dev
mailing list