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
-~----------~----~----~----~------~----~------~--~---

Reply via email to