[11] RFR (S): 8203480: IncompatibleClassChangeError thrown at sites linked to default interface methods

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed Jun 6 17:01:41 UTC 2018


Looks good.

Thanks,
Vladimir

On 6/5/18 2:42 PM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8203480/webrev.00/
> https://bugs.openjdk.java.net/browse/JDK-8203480
> 
> JDK-8072008 enabled MethodHandle linker elimination when MemberName is a 
> compile-time constant, but target method isn't inlined. It involves 
> method resolution step and attached method + linker are used to initiate 
> it.
> 
> The problematic case is invokevirtual on a default method. As an example:
> 
>    interface I { default m() {} }
>    class T implements I {}
> 
>    invokevirtual T.m() =R=> I.m()
>    findVirtual(T.class, "m", ...) => DMH: MH.linkToVirtual(..., I.m())
> 
> During call site resolution, "invokevirtual I.m()" resolution is 
> initiated and it fails link-time checks ending with an ICCE.
> 
> The fix is to adjust invocation mode for default methods from 
> invokevirtual to invokeinterface: resolution succeeds for 
> "invokeinterface I.m()" and it does the right thing.
> 
> Testing: hs-precheckin-comp, hs-tier1, hs-tier2 
> (-XX:+-StressMethodHandleLinkerInlining)
> 
> Thanks!
> 
> Best regards,
> Vladimir Ivanov


More information about the hotspot-compiler-dev mailing list