diff options
author | 2022-04-28 15:46:40 +0100 | |
---|---|---|
committer | 2022-04-29 03:53:43 +0000 | |
commit | 1fbfa9b23cd1f0b4e00fd82ea999f9530f18b609 (patch) | |
tree | 0bb71b9f32fd61621bb4b5d2e364f1ad0e9c6278 /compiler/optimizing/instruction_simplifier.cc | |
parent | 2fd8aecd8b50b4dbf4fa882e5f955f25400051f6 (diff) |
Fix `CanUseKnownBootImageVarHandle()`.
The first input to `HStaticFieldGet` in not necessarily an
`HLoadClass`. It can be also `HClinitCheck`.
Test: Rely on TreeHugger.
Bug: 191765508
Bug: 230729606
Change-Id: Ib05b0c8a74809698cb5084349959efac4e8f35a7
Diffstat (limited to 'compiler/optimizing/instruction_simplifier.cc')
-rw-r--r-- | compiler/optimizing/instruction_simplifier.cc | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/optimizing/instruction_simplifier.cc b/compiler/optimizing/instruction_simplifier.cc index 914e44a18d..4db258b1f0 100644 --- a/compiler/optimizing/instruction_simplifier.cc +++ b/compiler/optimizing/instruction_simplifier.cc @@ -2940,7 +2940,7 @@ bool InstructionSimplifierVisitor::CanUseKnownBootImageVarHandle(HInvoke* invoke DCHECK(!declaring_class->IsInitialized()); return false; } - HLoadClass* load_class = var_handle_instruction->InputAt(0)->AsLoadClass(); + HInstruction* load_class = var_handle_instruction->InputAt(0)->AsLoadClass(); if (kIsDebugBuild) { bool is_in_boot_image = false; if (Runtime::Current()->GetHeap()->ObjectIsInBootImageSpace(declaring_class)) { @@ -2950,9 +2950,10 @@ bool InstructionSimplifierVisitor::CanUseKnownBootImageVarHandle(HInvoke* invoke const char* descriptor = declaring_class->GetDescriptor(&storage); is_in_boot_image = compiler_options.IsImageClass(descriptor); } - CHECK_EQ(is_in_boot_image, load_class->IsInBootImage()); + CHECK_EQ(is_in_boot_image, + load_class->IsLoadClass() && load_class->AsLoadClass()->IsInBootImage()); } - if (!load_class->IsInBootImage()) { + if (!load_class->IsLoadClass() || !load_class->AsLoadClass()->IsInBootImage()) { return false; } |