| // Copyright 2017 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(arg) { |
| var value; |
| // None of the branches of this switch are ever taken, but |
| // the sequence means value could be the hole. |
| switch (arg) { |
| case 1: |
| let let_var = 1; |
| case 2: |
| value = let_var; |
| } |
| // Speculative number binop with NumberOrOddball feedback. |
| // Shouldn't be optimized to pure operator since value's phi |
| // could theoretically be the hole (we would have already thrown a |
| // reference error in case 2 above if so, but TF typing still |
| // thinks it could be the hole). |
| return value * undefined; |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| foo(3); |
| foo(3); |
| %OptimizeFunctionOnNextCall(foo); |
| foo(3); |