diff options
author | Mingyao Yang <mingyao@google.com> | 2015-05-18 12:12:50 -0700 |
---|---|---|
committer | Mingyao Yang <mingyao@google.com> | 2015-06-18 13:42:03 -0700 |
commit | ef484d442a3dcae2cd1842c5be0623f5cf71e4ab (patch) | |
tree | 5c50bd5b9d213a1072b8955e845ba2df6f18d66e /runtime/art_method.cc | |
parent | 07c6f5a3eb17e08f3f2d850e130896f63c80911f (diff) | |
download | art-ef484d442a3dcae2cd1842c5be0623f5cf71e4ab.tar.gz art-ef484d442a3dcae2cd1842c5be0623f5cf71e4ab.tar.bz2 art-ef484d442a3dcae2cd1842c5be0623f5cf71e4ab.zip |
Fix nested deoptimization.
Handle nested deoptimization cases. Create a stacked shadow frame
records to keep track of deoptimization shadow frames. Shadow frames
under construction can be tracked in the same stack.
Bug: 20845490
(cherry picked from commit 1f2d3ba6af52cf6f566deb38b7e07735c9a08fb6)
Change-Id: I768285792c29e7c3cfcd21e7a2600802506024d8
Diffstat (limited to 'runtime/art_method.cc')
-rw-r--r-- | runtime/art_method.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/runtime/art_method.cc b/runtime/art_method.cc index fbaf0ae217..478a87ef70 100644 --- a/runtime/art_method.cc +++ b/runtime/art_method.cc @@ -424,7 +424,8 @@ void ArtMethod::Invoke(Thread* self, uint32_t* args, uint32_t args_size, JValue* // exception was thrown to force the activations to be removed from the // stack. Continue execution in the interpreter. self->ClearException(); - ShadowFrame* shadow_frame = self->GetAndClearDeoptimizationShadowFrame(result); + ShadowFrame* shadow_frame = self->PopStackedShadowFrame(kDeoptimizationShadowFrame); + result->SetJ(self->PopDeoptimizationReturnValue().GetJ()); self->SetTopOfStack(nullptr); self->SetTopOfShadowStack(shadow_frame); interpreter::EnterInterpreterFromDeoptimize(self, shadow_frame, result); |