summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2012-10-11 21:35:03 -0700
committerIan Rogers <irogers@google.com>2012-10-11 21:35:03 -0700
commita6389411aaec94222c1c5c7ace7ad47343e6bada (patch)
tree033bf04e409f5636db1a5ec788e6752bc4060889
parentbac4334bb222e24fb3a080b69de0262a39e397c2 (diff)
downloadart-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.cc8
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();