summaryrefslogtreecommitdiff
path: root/compiler/optimizing/instruction_builder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/optimizing/instruction_builder.cc')
-rw-r--r--compiler/optimizing/instruction_builder.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/optimizing/instruction_builder.cc b/compiler/optimizing/instruction_builder.cc
index c96ea5d945..62932c989f 100644
--- a/compiler/optimizing/instruction_builder.cc
+++ b/compiler/optimizing/instruction_builder.cc
@@ -1936,7 +1936,9 @@ ArtField* HInstructionBuilder::ResolveField(uint16_t field_idx, bool is_static,
// Check access.
Handle<mirror::Class> compiling_class = dex_compilation_unit_->GetCompilingClass();
if (compiling_class == nullptr) {
- if (!resolved_field->IsPublic()) {
+ // For unresolved compiling class, handle only the simple case of a public field
+ // in a public class and use a slow runtime call for all other cases.
+ if (!resolved_field->IsPublic() || !resolved_field->GetDeclaringClass()->IsPublic()) {
return nullptr;
}
} else if (!compiling_class->CanAccessResolvedField(resolved_field->GetDeclaringClass(),