| // 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 foo(a) { | 
 |   var y = 0x7fffffff;  // 2^31 - 1 | 
 |  | 
 |   // Widen the static type of y (this condition never holds). | 
 |   if (a == NaN) y = NaN; | 
 |  | 
 |   // The next condition holds only in the warmup run. It leads to Smi | 
 |   // (SignedSmall) feedback being collected for the addition below. | 
 |   if (a) y = -1; | 
 |  | 
 |   const z = (y + 1)|0; | 
 |   return z < 0; | 
 | } | 
 |  | 
 | %PrepareFunctionForOptimization(foo); | 
 | assertFalse(foo(true)); | 
 | %OptimizeFunctionOnNextCall(foo); | 
 | assertTrue(foo(false)); |