summaryrefslogtreecommitdiff
path: root/compiler/optimizing/sharpening.cc
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2017-03-16 16:18:15 +0000
committer Vladimir Marko <vmarko@google.com> 2017-03-23 15:25:27 +0000
commitf25cc730ff70f085daf527f69a02fdee69aee16b (patch)
tree2f36f61990add16e7519d8b93506d6049dd7764c /compiler/optimizing/sharpening.cc
parent7591bdadf72a2fe155f937b8dc66f6249cedd014 (diff)
Deterministic DexCache in heap images.
Preload each slot in dex cache arrays with the candidate entry with the lowest index. Also fix a discrepancy where we used to keep an ArtField* in the DexCache if we kept the declaring class rather than based on the class referenced in the corresponding FieldId. This can result in accessing a field through a FieldId with an unresolved class as demonstrated by the regression test. Test: 159-app-image-fields Test: testrunner.py --host Bug: 30627598 Change-Id: I34735047cb064ff462cd9859e86a61ddf8615ecd
Diffstat (limited to 'compiler/optimizing/sharpening.cc')
-rw-r--r--compiler/optimizing/sharpening.cc4
1 files changed, 2 insertions, 2 deletions
diff --git a/compiler/optimizing/sharpening.cc b/compiler/optimizing/sharpening.cc
index 7bd38c7a8c..eedaf6e67e 100644
--- a/compiler/optimizing/sharpening.cc
+++ b/compiler/optimizing/sharpening.cc
@@ -259,7 +259,7 @@ void HSharpening::ProcessLoadString(HLoadString* load_string) {
} else if (runtime->UseJitCompilation()) {
// TODO: Make sure we don't set the "compile PIC" flag for JIT as that's bogus.
// DCHECK(!codegen_->GetCompilerOptions().GetCompilePic());
- string = class_linker->LookupString(dex_file, string_index, dex_cache);
+ string = class_linker->LookupString(dex_file, string_index, dex_cache.Get());
if (string != nullptr) {
if (runtime->GetHeap()->ObjectIsInBootImageSpace(string)) {
desired_load_kind = HLoadString::LoadKind::kBootImageAddress;
@@ -271,7 +271,7 @@ void HSharpening::ProcessLoadString(HLoadString* load_string) {
}
} else {
// AOT app compilation. Try to lookup the string without allocating if not found.
- string = class_linker->LookupString(dex_file, string_index, dex_cache);
+ string = class_linker->LookupString(dex_file, string_index, dex_cache.Get());
if (string != nullptr &&
runtime->GetHeap()->ObjectIsInBootImageSpace(string) &&
!codegen_->GetCompilerOptions().GetCompilePic()) {