| // Copyright 2021 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 --opt |
| |
| // https://bugs.chromium.org/p/v8/issues/detail?id=10816 |
| // When V8 sees a deprecated map, update the IC with its target. |
| |
| function A() { this.x = 1 } |
| function B() { this.x = 1 } |
| function load(o) { return o.x } |
| %PrepareFunctionForOptimization(load); |
| |
| // Initialize the load IC with the map of A before we deprecate it. |
| load(new A()); |
| |
| const oldB = new B(); |
| (new A()).x = 1.5; // deprecates map already in FV |
| (new B()).x = 1.5; // deprecates map for oldB |
| |
| // Should update the load IC with the target of the deprecated map. |
| load(oldB); |
| |
| %OptimizeFunctionOnNextCall(load); |
| load(oldB); |
| assertOptimized(load); |