ART: Add miranda checking
Add a test for resolution of miranda methods across dex-files. See
CL 112688 and b/18193682 for the code change.
Fix the test script to support no-verify again.
Weaken the dex cache check to a check whether the found method is a
miranda method. This will penalize miranda methods, as they will
always have to be resolved by name, but does not require the multi-step
load of the method's dex cache.
Bug: 18193682
Change-Id: I1dae2a9ec0985dc8625acd7dd5686a5d3cdc8888
diff --git a/runtime/mirror/class.cc b/runtime/mirror/class.cc
index 884aac1..828d986 100644
--- a/runtime/mirror/class.cc
+++ b/runtime/mirror/class.cc
@@ -490,8 +490,9 @@
for (size_t i = 0; i < NumVirtualMethods(); ++i) {
ArtMethod* method = GetVirtualMethod(i);
if (method->GetDexMethodIndex() == dex_method_idx &&
- // A miranda method may have a different DexCache.
- method->GetDexCache() == dex_cache) {
+ // A miranda method may have a different DexCache and is always created by linking,
+ // never *declared* in the class.
+ !method->IsMiranda()) {
return method;
}
}