Reviewers: Erik Corry, Kevin Millikin, Description: Fix crash in arm conditional expression code generation.
Please review this at http://codereview.chromium.org/155234 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/arm/codegen-arm.cc Index: src/arm/codegen-arm.cc =================================================================== --- src/arm/codegen-arm.cc (revision 2383) +++ src/arm/codegen-arm.cc (working copy) @@ -2424,13 +2424,23 @@ JumpTarget exit; LoadConditionAndSpill(node->condition(), NOT_INSIDE_TYPEOF, &then, &else_, true); - Branch(false, &else_); - then.Bind(); - LoadAndSpill(node->then_expression(), typeof_state()); - exit.Jump(); - else_.Bind(); - LoadAndSpill(node->else_expression(), typeof_state()); - exit.Bind(); + if (frame_ != NULL) { + Branch(false, &else_); + } + if (frame_ != NULL || then.is_linked()) { + then.Bind(); + LoadAndSpill(node->then_expression(), typeof_state()); + } + if (frame_ != NULL) { + exit.Jump(); + } + if (else_.is_linked()) { + else_.Bind(); + LoadAndSpill(node->else_expression(), typeof_state()); + } + if (exit.is_linked()) { + exit.Bind(); + } ASSERT(frame_->height() == original_height + 1); } --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
