2020-02-13 10:56:10 +00:00
|
|
|
// Copyright 2020 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
|
|
|
|
|
|
|
|
|
|
|
|
function foo1() {
|
|
|
|
var x = -Infinity;
|
|
|
|
var i = 0;
|
|
|
|
for (; i < 1; i += x) {
|
|
|
|
if (i == -Infinity) x = +Infinity;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
%PrepareFunctionForOptimization(foo1);
|
|
|
|
assertEquals(NaN, foo1());
|
|
|
|
assertEquals(NaN, foo1());
|
|
|
|
%OptimizeFunctionOnNextCall(foo1);
|
|
|
|
assertEquals(NaN, foo1());
|
|
|
|
|
|
|
|
|
|
|
|
function foo2() {
|
|
|
|
var i = -Infinity;
|
|
|
|
for (; i <= 42; i += Infinity) { }
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
%PrepareFunctionForOptimization(foo2);
|
|
|
|
assertEquals(NaN, foo2());
|
|
|
|
assertEquals(NaN, foo2());
|
|
|
|
%OptimizeFunctionOnNextCall(foo2);
|
|
|
|
assertEquals(NaN, foo2());
|
2020-02-19 15:08:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
function foo3(b) {
|
|
|
|
var k = 0;
|
|
|
|
let str = b ? "42" : "0";
|
|
|
|
for (var i = str; i < 1 && k++ < 1; i -= 0) { }
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
%PrepareFunctionForOptimization(foo3);
|
|
|
|
assertEquals(0, foo3());
|
|
|
|
assertEquals(0, foo3());
|
|
|
|
%OptimizeFunctionOnNextCall(foo3);
|
|
|
|
assertEquals(0, foo3());
|