Reviewers: Mads Ager, Description: Reverted r1434
Please review this at http://codereview.chromium.org/40216 Affected files: M src/codegen-ia32.cc M test/mjsunit/regress/regress-259.js Index: src/codegen-ia32.cc diff --git a/src/codegen-ia32.cc b/src/codegen-ia32.cc index 649c9e5d45f3a7d6a6304602e0963e9de739a301..b5ac20078f319ca61fdbab88e75b586d1eb1cfd3 100644 --- a/src/codegen-ia32.cc +++ b/src/codegen-ia32.cc @@ -2830,29 +2830,22 @@ void CodeGenerator::VisitTryFinally(TryFinally* node) { } // Unlink from try chain; be careful not to destroy the TOS. - if (unlink.is_linked()) { - unlink.Bind(); - } - - // Control can reach here via a jump to unlink or by falling off the - // end of the try block (with no unlinks). - if (has_valid_frame()) { - // Reload sp from the top handler, because some statements that we - // break from (eg, for...in) may have left stuff on the stack. - // Preserve the TOS in a register across stack manipulation. - frame_->EmitPop(eax); - ExternalReference handler_address(Top::k_handler_address); - __ mov(edx, Operand::StaticVariable(handler_address)); - const int kNextOffset = StackHandlerConstants::kNextOffset + - StackHandlerConstants::kAddressDisplacement; - __ lea(esp, Operand(edx, kNextOffset)); - frame_->Forget(frame_->height() - handler_height); - - frame_->EmitPop(Operand::StaticVariable(handler_address)); - frame_->Drop(StackHandlerConstants::kSize / kPointerSize - 1); - // Next_sp popped. - frame_->EmitPush(eax); - } + unlink.Bind(); + // Reload sp from the top handler, because some statements that we + // break from (eg, for...in) may have left stuff on the stack. + // Preserve the TOS in a register across stack manipulation. + frame_->EmitPop(eax); + ExternalReference handler_address(Top::k_handler_address); + __ mov(edx, Operand::StaticVariable(handler_address)); + const int kNextOffset = StackHandlerConstants::kNextOffset + + StackHandlerConstants::kAddressDisplacement; + __ lea(esp, Operand(edx, kNextOffset)); + frame_->Forget(frame_->height() - handler_height); + + frame_->EmitPop(Operand::StaticVariable(handler_address)); + frame_->Drop(StackHandlerConstants::kSize / kPointerSize - 1); + // Next_sp popped. + frame_->EmitPush(eax); // --- Finally block --- finally_block.Bind(); Index: test/mjsunit/regress/regress-259.js diff --git a/test/mjsunit/regress/regress-259.js b/test/mjsunit/regress/regress-259.js deleted file mode 100644 index f0476ffc375f0b7a0f1b53d3ea7667db4bad884d..0000000000000000000000000000000000000000 --- a/test/mjsunit/regress/regress-259.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2009 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Test that we do not crash when compiling a try/finally with an -// infinite loop (with no normal exits) in the try block. - -// See http://code.google.com/p/v8/issues/detail?id=259 - -assertThrows("try { while (true) { throw 0; }} finally {}"); --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---