summaryrefslogtreecommitdiff
path: root/runtime/class_linker-inl.h
diff options
context:
space:
mode:
author Nicolas Geoffray <ngeoffray@google.com> 2015-06-23 18:16:46 +0100
committer Nicolas Geoffray <ngeoffray@google.com> 2015-06-24 10:02:22 +0100
commit9638b64f167d2447d118664c1e1276501e4a1ecc (patch)
tree2e6e562d6632b36cc279985900983ca420629ebc /runtime/class_linker-inl.h
parentd4a02cfc59a449d216faa687cfdaa4252b4a433f (diff)
Remove bogus DCHECK.
Spotted by running libcore tests with libartd.so. The FindClass call will throw the exception if the element type is void. Change-Id: Ic5df7eb6c9934b8e70f7bfdcfe533e5c1ad5c518
Diffstat (limited to 'runtime/class_linker-inl.h')
-rw-r--r--runtime/class_linker-inl.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/runtime/class_linker-inl.h b/runtime/class_linker-inl.h
index df6703cc7b..21b63c61a2 100644
--- a/runtime/class_linker-inl.h
+++ b/runtime/class_linker-inl.h
@@ -41,7 +41,6 @@ inline mirror::Class* ClassLinker::FindArrayClass(Thread* self, mirror::Class**
return array_class;
}
}
- DCHECK(!(*element_class)->IsPrimitiveVoid());
std::string descriptor = "[";
std::string temp;
descriptor += (*element_class)->GetDescriptor(&temp);
@@ -49,10 +48,15 @@ inline mirror::Class* ClassLinker::FindArrayClass(Thread* self, mirror::Class**
Handle<mirror::ClassLoader> class_loader(hs.NewHandle((*element_class)->GetClassLoader()));
HandleWrapper<mirror::Class> h_element_class(hs.NewHandleWrapper(element_class));
mirror::Class* array_class = FindClass(self, descriptor.c_str(), class_loader);
- // Benign races in storing array class and incrementing index.
- size_t victim_index = find_array_class_cache_next_victim_;
- find_array_class_cache_[victim_index] = GcRoot<mirror::Class>(array_class);
- find_array_class_cache_next_victim_ = (victim_index + 1) % kFindArrayCacheSize;
+ if (array_class != nullptr) {
+ // Benign races in storing array class and incrementing index.
+ size_t victim_index = find_array_class_cache_next_victim_;
+ find_array_class_cache_[victim_index] = GcRoot<mirror::Class>(array_class);
+ find_array_class_cache_next_victim_ = (victim_index + 1) % kFindArrayCacheSize;
+ } else {
+ // We should have a NoClassDefFoundError.
+ self->AssertPendingException();
+ }
return array_class;
}