summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2015-06-22 13:47:02 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2015-06-22 13:47:02 +0000
commit2d655f1ce89a714094a4f55ac75edcf9a34c7e24 (patch)
treec6046874de725b77a8744637f470ade1861fa7c7 /compiler
parenta63d8f44740a8406adda6aaff7ed75ef923c085f (diff)
parentb783b408112d1797da646f576a40f94bcb5162f3 (diff)
Merge "Revert "Revert "Use IsAssignableFrom instead of IsSubclass for robustness."""
Diffstat (limited to 'compiler')
-rw-r--r--compiler/driver/compiler_driver-inl.h6
-rw-r--r--compiler/optimizing/builder.cc3
2 files changed, 6 insertions, 3 deletions
diff --git a/compiler/driver/compiler_driver-inl.h b/compiler/driver/compiler_driver-inl.h
index e0c56fcc82..633bc1b1be 100644
--- a/compiler/driver/compiler_driver-inl.h
+++ b/compiler/driver/compiler_driver-inl.h
@@ -250,8 +250,10 @@ inline bool CompilerDriver::CanAssumeClassIsInitialized(mirror::Class* klass) {
inline bool CompilerDriver::CanReferrerAssumeClassIsInitialized(mirror::Class* referrer_class,
mirror::Class* klass) {
- return (referrer_class != nullptr && referrer_class->IsSubClass(klass)) ||
- CanAssumeClassIsInitialized(klass);
+ return (referrer_class != nullptr
+ && !referrer_class->IsInterface()
+ && referrer_class->IsSubClass(klass))
+ || CanAssumeClassIsInitialized(klass);
}
inline bool CompilerDriver::IsStaticFieldsClassInitialized(mirror::Class* referrer_class,
diff --git a/compiler/optimizing/builder.cc b/compiler/optimizing/builder.cc
index 07366936bf..c49752642b 100644
--- a/compiler/optimizing/builder.cc
+++ b/compiler/optimizing/builder.cc
@@ -697,7 +697,8 @@ bool HGraphBuilder::BuildInvoke(const Instruction& instruction,
&storage_index);
}
- if (outer_class.Get()->IsSubClass(resolved_method->GetDeclaringClass())) {
+ if (!outer_class->IsInterface()
+ && outer_class->IsSubClass(resolved_method->GetDeclaringClass())) {
// If the outer class is the declaring class or a subclass
// of the declaring class, no class initialization is needed
// before the static method call.