From 50fe6dc170402600936d72a5fd729b5ebda0294b Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Fri, 7 Aug 2020 17:38:51 +0100 Subject: 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 --- compiler/optimizing/instruction_builder.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'compiler/optimizing/instruction_builder.cc') 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 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(), -- cgit v1.2.3-59-g8ed1b