| // 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()); |
| |
| |
| 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()); |