summaryrefslogtreecommitdiffstats
path: root/runtime/class_linker.cc
diff options
context:
space:
mode:
authorAlex Light <allight@google.com>2016-04-04 13:23:14 -0700
committerAlex Light <allight@google.com>2016-04-04 21:06:52 +0000
commit06039ba7c5d1251be7bc041cf64069827364d4ce (patch)
treef4ca699dd52f9095d0da5dc661751ae536509479 /runtime/class_linker.cc
parent1669fe3219f295d14c43d5bd3b4e8d255e52be3f (diff)
downloadandroid_art-06039ba7c5d1251be7bc041cf64069827364d4ce.tar.gz
android_art-06039ba7c5d1251be7bc041cf64069827364d4ce.tar.bz2
android_art-06039ba7c5d1251be7bc041cf64069827364d4ce.zip
Fix issue with verification check failure on erroneous classes.
Bug: 27924355 Change-Id: I7d680e7196aeb9e2e6ef54139634564e058174d7
Diffstat (limited to 'runtime/class_linker.cc')
-rw-r--r--runtime/class_linker.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index 706059369c..d73f205b80 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -3786,7 +3786,9 @@ void ClassLinker::VerifyClass(Thread* self, Handle<mirror::Class> klass, LogSeve
while (old_status == mirror::Class::kStatusVerifying ||
old_status == mirror::Class::kStatusVerifyingAtRuntime) {
lock.WaitIgnoringInterrupts();
- CHECK_GT(klass->GetStatus(), old_status);
+ CHECK(klass->IsErroneous() || (klass->GetStatus() > old_status))
+ << "Class '" << PrettyClass(klass.Get()) << "' performed an illegal verification state "
+ << "transition from " << old_status << " to " << klass->GetStatus();
old_status = klass->GetStatus();
}