summaryrefslogtreecommitdiff
path: root/src/class_linker.cc
diff options
context:
space:
mode:
author jeffhao <jeffhao@google.com> 2012-06-06 17:18:39 -0700
committer jeffhao <jeffhao@google.com> 2012-06-06 17:18:39 -0700
commita9b3bf4b42d80cfcc27b6f8da7e28ced04a1619b (patch)
treecca2c257e6fdc90e520eddc5a43d7f113ead8cfc /src/class_linker.cc
parentebe2e0f2e5145ef8433c1459b9cd60ecd853ee76 (diff)
More fixes to make new Class status work properly.
InitializeClass should only check for an exception from VerifyClass if the class is erroneous. Also, the status ordering was changed so that kStatusRetryVerificationAtRuntime is after kStatusVerifying. Change-Id: Ibbfb1696dfee88cb8fcef5673f7e353f30a8fe5a
Diffstat (limited to 'src/class_linker.cc')
-rw-r--r--src/class_linker.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/class_linker.cc b/src/class_linker.cc
index e2ae0f3fd1..3280410ce6 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -1967,7 +1967,8 @@ void ClassLinker::VerifyClass(Class* klass) {
return;
}
- CHECK(klass->IsResolved()) << PrettyClass(klass);
+ CHECK(klass->GetStatus() == Class::kStatusResolved ||
+ klass->GetStatus() == Class::kStatusRetryVerificationAtRuntime) << PrettyClass(klass);
klass->SetStatus(Class::kStatusVerifying);
// Verify super class
@@ -2361,7 +2362,9 @@ bool ClassLinker::InitializeClass(Class* klass, bool can_run_clinit, bool can_in
klass->GetStatus() == Class::kStatusRetryVerificationAtRuntime) {
VerifyClass(klass);
if (klass->GetStatus() != Class::kStatusVerified) {
- CHECK(self->IsExceptionPending());
+ if (klass->GetStatus() == Class::kStatusError) {
+ CHECK(self->IsExceptionPending());
+ }
return false;
}
}