diff options
author | Vladimir Marko <vmarko@google.com> | 2020-08-07 17:38:51 +0100 |
---|---|---|
committer | Vladimir Marko <vmarko@google.com> | 2020-08-18 08:00:18 +0000 |
commit | 50fe6dc170402600936d72a5fd729b5ebda0294b (patch) | |
tree | a26c3d7ec656537f32ebff7125c77b3b9dc766c8 /compiler/optimizing/instruction_builder.cc | |
parent | 2ea5d0408fd09bd95a97a796270d6b0c31acab2e (diff) |
Optimizing: Fix weak field access check.
Test: New test 727-checker-unresolved-class
Test: testrunner.py --host --optimizing --interpreter --jvm -t 727
Test: testrunner.py --host --optimizing
Bug: 161898207
Change-Id: Iaab9e3fef4775144d533086ec3797ce7d06c50b7
Diffstat (limited to 'compiler/optimizing/instruction_builder.cc')
-rw-r--r-- | compiler/optimizing/instruction_builder.cc | 4 |
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(), |