diff options
| author | 2015-08-27 16:04:21 +0000 | |
|---|---|---|
| committer | 2015-08-27 16:04:21 +0000 | |
| commit | 706ea6a0294ef8bc3def050142c548c082fa8e30 (patch) | |
| tree | 2a6737a452fe6059e47aefda8ec5b9778ff2d582 /compiler/driver/compiler_driver.cc | |
| parent | 772cc4a2d4f978888d1b1e5a78c1c16a108260ed (diff) | |
| parent | 0760a81257fa427646c309500d603194009265ef (diff) | |
Merge "ART: Propagate verifier failure types to the compilers"
Diffstat (limited to 'compiler/driver/compiler_driver.cc')
| -rw-r--r-- | compiler/driver/compiler_driver.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index d38677e62c..c006e62a16 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -590,14 +590,18 @@ static void CompileMethod(Thread* self, } else if ((access_flags & kAccAbstract) != 0) { // Abstract methods don't have code. } else { - bool has_verified_method = driver->GetVerificationResults() - ->GetVerifiedMethod(method_ref) != nullptr; + const VerifiedMethod* verified_method = + driver->GetVerificationResults()->GetVerifiedMethod(method_ref); bool compile = compilation_enabled && // Basic checks, e.g., not <clinit>. driver->GetVerificationResults() ->IsCandidateForCompilation(method_ref, access_flags) && // Did not fail to create VerifiedMethod metadata. - has_verified_method && + verified_method != nullptr && + // Do not have failures that should punt to the interpreter. + !verified_method->HasRuntimeThrow() && + (verified_method->GetEncounteredVerificationFailures() & + verifier::VERIFY_ERROR_FORCE_INTERPRETER) == 0 && // Is eligable for compilation by methods-to-compile filter. driver->IsMethodToCompile(method_ref); if (compile) { @@ -620,7 +624,7 @@ static void CompileMethod(Thread* self, method_idx, class_loader, dex_file, - has_verified_method + (verified_method != nullptr) ? dex_to_dex_compilation_level : optimizer::DexToDexCompilationLevel::kRequired); } |