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
(cherry picked from commit dc13d7df5da49e93963035633a82699c68fa0971)
Change-Id: I506250949a1802898433e9099dcb8ef31dd89659
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 617f4bd..1ea42bb 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -2398,7 +2398,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");