Merge "Enable dex diff check on debug builds."
diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc
index aceeefb..4a279d8 100644
--- a/compiler/optimizing/code_generator_x86.cc
+++ b/compiler/optimizing/code_generator_x86.cc
@@ -4633,12 +4633,7 @@
void CodeGeneratorX86::RecordBootStringPatch(HLoadString* load_string) {
DCHECK(GetCompilerOptions().IsBootImage());
- HX86ComputeBaseMethodAddress* address = nullptr;
- if (GetCompilerOptions().GetCompilePic()) {
- address = load_string->InputAt(0)->AsX86ComputeBaseMethodAddress();
- } else {
- DCHECK_EQ(load_string->InputCount(), 0u);
- }
+ HX86ComputeBaseMethodAddress* address = load_string->InputAt(0)->AsX86ComputeBaseMethodAddress();
string_patches_.emplace_back(address,
load_string->GetDexFile(),
load_string->GetStringIndex().index_);
@@ -4646,12 +4641,7 @@
}
void CodeGeneratorX86::RecordBootTypePatch(HLoadClass* load_class) {
- HX86ComputeBaseMethodAddress* address = nullptr;
- if (GetCompilerOptions().GetCompilePic()) {
- address = load_class->InputAt(0)->AsX86ComputeBaseMethodAddress();
- } else {
- DCHECK_EQ(load_class->InputCount(), 0u);
- }
+ HX86ComputeBaseMethodAddress* address = load_class->InputAt(0)->AsX86ComputeBaseMethodAddress();
boot_image_type_patches_.emplace_back(address,
load_class->GetDexFile(),
load_class->GetTypeIndex().index_);
diff --git a/runtime/jit/jit.cc b/runtime/jit/jit.cc
index 1dfb0f6..ae474da 100644
--- a/runtime/jit/jit.cc
+++ b/runtime/jit/jit.cc
@@ -20,6 +20,7 @@
#include "art_method-inl.h"
#include "base/enums.h"
+#include "base/memory_tool.h"
#include "debugger.h"
#include "entrypoints/runtime_asm_entrypoints.h"
#include "interpreter/interpreter.h"
@@ -308,20 +309,23 @@
Thread* self = Thread::Current();
DCHECK(Runtime::Current()->IsShuttingDown(self));
if (thread_pool_ != nullptr) {
- ThreadPool* cache = nullptr;
+ std::unique_ptr<ThreadPool> pool;
{
ScopedSuspendAll ssa(__FUNCTION__);
// Clear thread_pool_ field while the threads are suspended.
// A mutator in the 'AddSamples' method will check against it.
- cache = thread_pool_.release();
+ pool = std::move(thread_pool_);
}
- cache->StopWorkers(self);
- cache->RemoveAllTasks(self);
+
+ // When running sanitized, let all tasks finish to not leak. Otherwise just clear the queue.
+ if (!RUNNING_ON_MEMORY_TOOL) {
+ pool->StopWorkers(self);
+ pool->RemoveAllTasks(self);
+ }
// We could just suspend all threads, but we know those threads
// will finish in a short period, so it's not worth adding a suspend logic
// here. Besides, this is only done for shutdown.
- cache->Wait(self, false, false);
- delete cache;
+ pool->Wait(self, false, false);
}
}
diff --git a/test/knownfailures.json b/test/knownfailures.json
index 366396f..4b44df7 100644
--- a/test/knownfailures.json
+++ b/test/knownfailures.json
@@ -557,6 +557,8 @@
"tests": [
"097-duplicate-method",
"138-duplicate-classes-check2",
+ "159-app-image-fields",
+ "649-vdex-duplicate-method",
"804-class-extends-itself",
"921-hello-failure"
],
@@ -573,6 +575,7 @@
"087-gc-after-link",
"626-const-class-linking",
"629-vdex-speed",
+ "647-jni-get-field-id",
"944-transform-classloaders"
],
"description": [