diff options
Diffstat (limited to 'compiler/driver')
| -rw-r--r-- | compiler/driver/compiler_driver.cc | 7 | ||||
| -rw-r--r-- | compiler/driver/compiler_driver.h | 4 |
2 files changed, 11 insertions, 0 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index c2b837512c..1698464280 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -2345,6 +2345,13 @@ CompiledMethod* CompilerDriver::GetCompiledMethod(MethodReference ref) const { return it->second; } +bool CompilerDriver::IsMethodVerifiedWithoutFailures(uint32_t method_idx, + const DexFile& dex_file) const { + MethodReference method_ref(&dex_file, method_idx); + const VerifiedMethod* verified_method = GetVerificationResults()->GetVerifiedMethod(method_ref); + return (verified_method != nullptr) && !verified_method->HasVerificationFailures(); +} + size_t CompilerDriver::GetNonRelativeLinkerPatchCount() const { MutexLock mu(Thread::Current(), compiled_methods_lock_); return non_relative_linker_patch_count_; diff --git a/compiler/driver/compiler_driver.h b/compiler/driver/compiler_driver.h index a6ed5590dc..b3ca25bed2 100644 --- a/compiler/driver/compiler_driver.h +++ b/compiler/driver/compiler_driver.h @@ -425,6 +425,10 @@ class CompilerDriver { void RecordClassStatus(ClassReference ref, mirror::Class::Status status) LOCKS_EXCLUDED(compiled_classes_lock_); + // Checks if the specified method has been verified without failures. Returns + // false if the method is not in the verification results (GetVerificationResults). + bool IsMethodVerifiedWithoutFailures(uint32_t method_idx, const DexFile& dex_file) const; + SwapVector<uint8_t>* DeduplicateCode(const ArrayRef<const uint8_t>& code); SwapSrcMap* DeduplicateSrcMappingTable(const ArrayRef<SrcMapElem>& src_map); SwapVector<uint8_t>* DeduplicateMappingTable(const ArrayRef<const uint8_t>& code); |