diff options
author | 2018-05-22 18:18:39 +0000 | |
---|---|---|
committer | 2018-05-22 18:18:39 +0000 | |
commit | 04f0eaffa70e0384c07bb3680aa0724144358330 (patch) | |
tree | e2c67558dd6202b4ff8b866c157fbc33b6a13434 /compiler/driver/compiler_driver.cc | |
parent | 438918b2f37e11684fa1e80bbbfe3a8f657b79a9 (diff) | |
parent | bb30d5d917a47d352c209473b3faf332736fa6ae (diff) |
Merge "ART: Skip duplicate classes during compilation"
Diffstat (limited to 'compiler/driver/compiler_driver.cc')
-rw-r--r-- | compiler/driver/compiler_driver.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index 39ed825001..7dc44fa44b 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -2160,6 +2160,9 @@ class VerifyClassVisitor : public CompilationVisitor { DCHECK(failure_kind == verifier::FailureKind::kNoFailure) << failure_kind; failure_kind = verifier::FailureKind::kSoftFailure; } + } else if (&klass->GetDexFile() != &dex_file) { + // Skip a duplicate class (as the resolved class is from another, earlier dex file). + return; // Do not update state. } else if (!SkipClass(jclass_loader, dex_file, klass.Get())) { CHECK(klass->IsResolved()) << klass->PrettyClass(); failure_kind = class_linker->VerifyClass(soa.Self(), klass, log_level_); @@ -2804,6 +2807,9 @@ static void CompileDexFile(CompilerDriver* driver, dex_cache = hs.NewHandle(class_linker->FindDexCache(soa.Self(), dex_file)); } else if (SkipClass(jclass_loader, dex_file, klass.Get())) { return; + } else if (&klass->GetDexFile() != &dex_file) { + // Skip a duplicate class (as the resolved class is from another, earlier dex file). + return; // Do not update state. } else { dex_cache = hs.NewHandle(klass->GetDexCache()); } |