v8/test/mjsunit/regress/regress-599710.js
jarin 3df0a8c1f2 [crankshaft] Make infinite loops preserve control flow.
We have to preserve control flow so that the liveness analysis is less
confused. This CL fixes loops to preserve teh original control flow.

BUG=chromium:599710
LOG=n

Review URL: https://codereview.chromium.org/1863123002

Cr-Commit-Position: refs/heads/master@{#35318}
2016-04-07 05:36:44 +00:00

50 lines
988 B
JavaScript

// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
var f1 = function() { while (1) { } }
function g1() {
var s = "hey";
f1 = function() { return true; }
if (f1()) { return s; }
}
%OptimizeFunctionOnNextCall(g1);
assertEquals("hey", g1());
var f2 = function() { do { } while (1); }
function g2() {
var s = "hey";
f2 = function() { return true; }
if (f2()) { return s; }
}
%OptimizeFunctionOnNextCall(g2);
assertEquals("hey", g2());
var f3 = function() { for (;;); }
function g3() {
var s = "hey";
f3 = function() { return true; }
if (f3()) { return s; }
}
%OptimizeFunctionOnNextCall(g3);
assertEquals("hey", g3());
var f4 = function() { for (;;); }
function g4() {
var s = "hey";
f4 = function() { return true; }
while (f4()) { return s; }
}
%OptimizeFunctionOnNextCall(g4);
assertEquals("hey", g4());