diff options
Diffstat (limited to 'runtime/class_linker.cc')
| -rw-r--r-- | runtime/class_linker.cc | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index 46722ecad7..4d48da6a83 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -4630,18 +4630,23 @@ bool ClassLinker::InitializeClass(Thread* self, Handle<mirror::Class> klass, } else { value_it.ReadValueToField<false>(field); } + if (self->IsExceptionPending()) { + break; + } DCHECK(!value_it.HasNext() || field_it.HasNextStaticField()); } } } - ArtMethod* clinit = klass->FindClassInitializer(image_pointer_size_); - if (clinit != nullptr) { - CHECK(can_init_statics); - JValue result; - clinit->Invoke(self, nullptr, 0, &result, "V"); - } + if (!self->IsExceptionPending()) { + ArtMethod* clinit = klass->FindClassInitializer(image_pointer_size_); + if (clinit != nullptr) { + CHECK(can_init_statics); + JValue result; + clinit->Invoke(self, nullptr, 0, &result, "V"); + } + } self->AllowThreadSuspension(); uint64_t t1 = NanoTime(); |