[8] RFR (XS): 8031695: CHA ignores default methods during analysis leading to incorrect code generation
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Wed Jan 22 09:29:32 PST 2014
http://cr.openjdk.java.net/~vlivanov/8031695/webrev.00/
https://bugs.openjdk.java.net/browse/JDK-8031695
CHA erroneously ignores default methods when looking for different
versions of a method in a class hierarchy.
Consider the following hierarchy:
interface I { default void m() { ... }}
class A implements I {}
class C extends A { }
class D extends A { public void m() { ... } }
Call site: invokevirtual A.m()
A.m resolves to I.m. Searching from A, CHA finds only D.m and concludes
that D.m is the only implementation of I.m, since
Dependencies::is_concrete_method returns false for I.m.
But there is C with default implementation from I. So, if VM inlines D.m
and then C's instance is passed as objectref, the wrong method is
invoked (D.m instead of I.m).
The fix is to take default methods into account doing CHA analysis and
treat the call site as non-monomorphic when a concrete method is found
for a default method.
Conservative approach is chosen, since the fix is targeted for 8.
Testing: failing application, regression test, vm.defmeth.testlist, JDK
regression tests (java/util/, java/lang)
Thanks!
Best regards,
Vladimir Ivanov
More information about the hotspot-dev
mailing list