diff options
Diffstat (limited to 'src/class_linker.cc')
-rw-r--r-- | src/class_linker.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/class_linker.cc b/src/class_linker.cc index dd8fc11f45..88016f4fe0 100644 --- a/src/class_linker.cc +++ b/src/class_linker.cc @@ -2183,11 +2183,13 @@ bool ClassLinker::LinkSuperClass(SirtRef<Class>& klass) { } // Verify if (super->IsFinal() || super->IsInterface()) { - Thread::Current()->ThrowNewExceptionF("Ljava/lang/IncompatibleClassChangeError;", + Thread* thread = Thread::Current(); + thread->ThrowNewExceptionF("Ljava/lang/IncompatibleClassChangeError;", "Superclass %s of %s is %s", PrettyDescriptor(super).c_str(), PrettyDescriptor(klass.get()).c_str(), super->IsFinal() ? "declared final" : "an interface"); + klass->SetVerifyErrorClass(thread->GetException()->GetClass()); return false; } if (!klass->CanAccess(super)) { @@ -2347,10 +2349,12 @@ bool ClassLinker::LinkInterfaceMethods(SirtRef<Class>& klass, ObjectArray<Class> DCHECK(interface != NULL); if (!interface->IsInterface()) { ClassHelper ih(interface); - Thread::Current()->ThrowNewExceptionF("Ljava/lang/IncompatibleClassChangeError;", + Thread* thread = Thread::Current(); + thread->ThrowNewExceptionF("Ljava/lang/IncompatibleClassChangeError;", "Class %s implements non-interface class %s", PrettyDescriptor(klass.get()).c_str(), PrettyDescriptor(ih.GetDescriptor()).c_str()); + klass->SetVerifyErrorClass(thread->GetException()->GetClass()); return false; } // Add this interface. |