diff options
Diffstat (limited to 'runtime/art_method.cc')
-rw-r--r-- | runtime/art_method.cc | 17 |
1 files changed, 1 insertions, 16 deletions
diff --git a/runtime/art_method.cc b/runtime/art_method.cc index 6f36016d25..cd38e16cf7 100644 --- a/runtime/art_method.cc +++ b/runtime/art_method.cc @@ -292,22 +292,7 @@ void ArtMethod::Invoke(Thread* self, uint32_t* args, uint32_t args_size, JValue* // Unusual case where we were running generated code and an // exception was thrown to force the activations to be removed from the // stack. Continue execution in the interpreter. - self->ClearException(); - ShadowFrame* shadow_frame = - self->PopStackedShadowFrame(StackedShadowFrameType::kDeoptimizationShadowFrame); - mirror::Throwable* pending_exception = nullptr; - bool from_code = false; - self->PopDeoptimizationContext(result, &pending_exception, &from_code); - CHECK(!from_code); - self->SetTopOfStack(nullptr); - self->SetTopOfShadowStack(shadow_frame); - - // Restore the exception that was pending before deoptimization then interpret the - // deoptimized frames. - if (pending_exception != nullptr) { - self->SetException(pending_exception); - } - interpreter::EnterInterpreterFromDeoptimize(self, shadow_frame, from_code, result); + self->DeoptimizeWithDeoptimizationException(result); } if (kLogInvocationStartAndReturn) { LOG(INFO) << StringPrintf("Returned '%s' quick code=%p", PrettyMethod(this).c_str(), |