Clean up initialization checks for entrypoints.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing --jit
Test: aosp_taimen-userdebug boots.
Test: run-gtests.sh
Test: testrunner.py --target --optimizing --jit
Bug: 18161648
Change-Id: Ia3c2fdb616a5bb289e5afeccd4e6fe3eaf7ed697
diff --git a/runtime/jit/jit.cc b/runtime/jit/jit.cc
index c6e0702..11619c4 100644
--- a/runtime/jit/jit.cc
+++ b/runtime/jit/jit.cc
@@ -31,6 +31,7 @@
#include "debugger.h"
#include "dex/type_lookup_table.h"
#include "gc/space/image_space.h"
+#include "entrypoints/entrypoint_utils-inl.h"
#include "entrypoints/runtime_asm_entrypoints.h"
#include "image-inl.h"
#include "interpreter/interpreter.h"
@@ -1249,7 +1250,8 @@
return false;
}
if (UNLIKELY(method->IsPreCompiled()) && !with_backedges /* don't check for OSR */) {
- if (!method->NeedsInitializationCheck()) {
+ if (!NeedsClinitCheckBeforeCall(method) ||
+ method->GetDeclaringClass()->IsVisiblyInitialized()) {
const void* entry_point = code_cache_->GetSavedEntryPointOfPreCompiledMethod(method);
if (entry_point != nullptr) {
Runtime::Current()->GetInstrumentation()->UpdateMethodsCode(method, entry_point);