RFR: 8087223: InterfaceMethod CP entry pointing to a class should cause ICCE

David Holmes david.holmes at oracle.com
Fri Nov 13 04:54:39 UTC 2015


Hi Yumin,

On 13/11/2015 6:54 AM, Yumin Qi wrote:
> Please review:
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8087223
> webrev:
> http://javaweb.us.oracle.com/~yqi/webrev/webrevs/8087223/8087223/webrev-01/

This is not a cr.openjdk link.

Thanks,
David

> 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.
>
> Thanks
> Yumin


More information about the hotspot-runtime-dev mailing list