diff options
author | Ian Rogers <irogers@google.com> | 2012-10-11 21:35:03 -0700 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2012-10-11 21:35:03 -0700 |
commit | a6389411aaec94222c1c5c7ace7ad47343e6bada (patch) | |
tree | 033bf04e409f5636db1a5ec788e6752bc4060889 | |
parent | bac4334bb222e24fb3a080b69de0262a39e397c2 (diff) | |
download | art-a6389411aaec94222c1c5c7ace7ad47343e6bada.zip art-a6389411aaec94222c1c5c7ace7ad47343e6bada.tar.gz art-a6389411aaec94222c1c5c7ace7ad47343e6bada.tar.bz2 |
Fix regression in target run-test 069.
.
Change-Id: I428b6b8c5ade8abad1e8b049f5caf5ddb953963c
-rw-r--r-- | src/oat/runtime/support_invoke.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/oat/runtime/support_invoke.cc b/src/oat/runtime/support_invoke.cc index 4656198..e66749d 100644 --- a/src/oat/runtime/support_invoke.cc +++ b/src/oat/runtime/support_invoke.cc @@ -27,6 +27,12 @@ extern "C" uint64_t artInvokeInterfaceTrampoline(AbstractMethod* interface_metho AbstractMethod* method; if (LIKELY(interface_method->GetDexMethodIndex() != DexFile::kDexNoIndex16)) { method = this_object->GetClass()->FindVirtualMethodForInterface(interface_method); + if (UNLIKELY(method == NULL)) { + FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsAndArgs); + ThrowIncompatibleClassChangeErrorClassForInterfaceDispatch(interface_method, this_object, + caller_method); + return 0; // Failure. + } } else { FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsAndArgs); DCHECK(interface_method == Runtime::Current()->GetResolutionMethod()); @@ -86,7 +92,7 @@ extern "C" uint64_t artInvokeInterfaceTrampoline(AbstractMethod* interface_metho false, kInterface); if (UNLIKELY(method == NULL)) { CHECK(self->IsExceptionPending()); - return 0; // failure + return 0; // Failure. } } const void* code = method->GetCode(); |