OSDN Git Service

ART: Fix assumption in class profile collection
authorAndreas Gampe <agampe@google.com>
Wed, 9 Mar 2016 23:52:21 +0000 (15:52 -0800)
committerAndreas Gampe <agampe@google.com>
Thu, 10 Mar 2016 00:19:07 +0000 (16:19 -0800)
The dex cache may contain erroneous classes. Filter, instead of
DCHECK.

Bug: 27500691

(cherry picked from commit 4309f6129795ade42591b872e44a33cec95f4e79)

Change-Id: Ic99bca3a7e54a5e7893c801ec5ac92cbf690cd67

runtime/class_linker.cc

index 01d140a..d51a1f7 100644 (file)
@@ -7714,7 +7714,10 @@ std::set<DexCacheResolvedClasses> ClassLinker::GetResolvedClasses(bool ignore_bo
       }
       ++num_resolved;
       DCHECK(!klass->IsProxyClass());
-      DCHECK(klass->IsResolved());
+      if (!klass->IsResolved()) {
+        DCHECK(klass->IsErroneous());
+        continue;
+      }
       mirror::DexCache* klass_dex_cache = klass->GetDexCache();
       if (klass_dex_cache == dex_cache) {
         const size_t class_def_idx = klass->GetDexClassDefIndex();