ART: Allow arrays with erroneous component type

Array classes must tolerate having component type classes that are
erroneous. Change CreateArrayClass to use LookupClass when FindClass
failed.

Bug: 16019155
Change-Id: Id4868c5498431c85c199aa3cbecd23566dce3601
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 7f89156..5599c21 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -2653,7 +2653,14 @@
   Handle<mirror::Class> component_type(hs.NewHandle(FindClass(self, descriptor + 1, class_loader)));
   if (component_type.Get() == nullptr) {
     DCHECK(self->IsExceptionPending());
-    return nullptr;
+    // We need to accept erroneous classes as component types.
+    component_type.Assign(LookupClass(descriptor + 1, class_loader.Get()));
+    if (component_type.Get() == nullptr) {
+      DCHECK(self->IsExceptionPending());
+      return nullptr;
+    } else {
+      self->ClearException();
+    }
   }
   if (UNLIKELY(component_type->IsPrimitiveVoid())) {
     ThrowNoClassDefFoundError("Attempt to create array of void primitive type");