Do a type check for knowing if we can inline.
Otherwise, we might successfully inline:
((String)nonStringObject).charAt()
Because the lookup of the method is based on the index of charAt,
and not its name.
Change-Id: I72ce802fd50cfb71343197f0a32bb1ef56549097
diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc
index ea613b2..07d0dd6 100644
--- a/compiler/optimizing/inliner.cc
+++ b/compiler/optimizing/inliner.cc
@@ -120,6 +120,9 @@
// Statically knowing that the receiver has an interface type cannot
// help us find what is the target method.
return nullptr;
+ } else if (!resolved_method->GetDeclaringClass()->IsAssignableFrom(info.GetTypeHandle().Get())) {
+ // The method that we're trying to call is not in the receiver's class or super classes.
+ return nullptr;
}
ClassLinker* cl = Runtime::Current()->GetClassLinker();