diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/driver/compiler_driver-inl.h | 6 | ||||
| -rw-r--r-- | compiler/optimizing/builder.cc | 3 |
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. |