Add class to verifier's rejected list if superclass is erroneous.

This will prevent the compiler from trying to compile one of these
classes, which will fail because it has no GC map.

Bug: 12104117
Change-Id: I77ec77d30ee5dc92d7f4c594f1e8f1ce9b67855d
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index a98673d..643c183 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -2489,6 +2489,8 @@
       if (cause.get() != nullptr) {
         self->GetException(nullptr)->SetCause(cause.get());
       }
+      ClassReference ref(klass->GetDexCache()->GetDexFile(), klass->GetDexClassDefIndex());
+      verifier::MethodVerifier::AddRejectedClass(ref);
       klass->SetStatus(mirror::Class::kStatusError, self);
       return;
     }
diff --git a/runtime/verifier/method_verifier.h b/runtime/verifier/method_verifier.h
index 6b5747b..dffda96 100644
--- a/runtime/verifier/method_verifier.h
+++ b/runtime/verifier/method_verifier.h
@@ -212,6 +212,8 @@
   static void Init() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
   static void Shutdown();
 
+  static void AddRejectedClass(ClassReference ref)
+      LOCKS_EXCLUDED(rejected_classes_lock_);
   static bool IsClassRejected(ClassReference ref)
       LOCKS_EXCLUDED(rejected_classes_lock_);
 
@@ -662,9 +664,6 @@
   static ReaderWriterMutex* rejected_classes_lock_ DEFAULT_MUTEX_ACQUIRED_AFTER;
   static RejectedClassesTable* rejected_classes_ GUARDED_BY(rejected_classes_lock_);
 
-  static void AddRejectedClass(ClassReference ref)
-      LOCKS_EXCLUDED(rejected_classes_lock_);
-
   RegTypeCache reg_types_;
 
   PcToRegisterLineTable reg_table_;