[8] RFR (XS): 8031695: CHA ignores default methods during analysis leading to incorrect code generation (original) (raw)
harold seigel harold.seigel at oracle.com
Wed Jan 22 11:40:46 PST 2014
- Previous message: [8] RFR (XS): 8031695: CHA ignores default methods during analysis leading to incorrect code generation
- Next message: [8] RFR (XS): 8031695: CHA ignores default methods during analysis leading to incorrect code generation
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Vladimir.
Does this second version of is_concrete_method() also need a "&& !m->is_overpass()"?
1191 bool Dependencies::is_concrete_method(ciMethod* m) { 1192 // Statics are irrelevant to virtual call sites. 1193 if (m->is_static()) return false; 1194 1195 // We could also return false if m does not yet appear to be 1196 // executed, if the VM version supports this distinction also. 1197 return !m->is_abstract(); 1198 }
Thanks, Harold
On 1/22/2014 12:29 PM, Vladimir Ivanov wrote:
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::isconcretemethod 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
- Previous message: [8] RFR (XS): 8031695: CHA ignores default methods during analysis leading to incorrect code generation
- Next message: [8] RFR (XS): 8031695: CHA ignores default methods during analysis leading to incorrect code generation
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]