// Copyright 2019 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 --turbofan --no-always-turbofan function f(x) { // TODO(v8:11457) If v8_dict_property_const_tracking is enabled, then the // prototype of |x| in |main| is a dictionary mode object, and we cannot // inline the storing of x.foo, yet. if (!%IsDictPropertyConstTrackingEnabled()) { %TurbofanStaticAssert(x.foo === 42); } return %IsBeingInterpreted(); } function main(b, ret) { const x = new Object(); const y = x; if (b) { return ret; } else { x.foo = 42; out = x; // Prevent x's new map from dying too early. return f(y); } } %PrepareFunctionForOptimization(f); %PrepareFunctionForOptimization(main); f({a: 1}); f({b: 1}); f({c: 1}); f({d: 1}); assertTrue(main(true, true)); assertTrue(main(true, true)); assertTrue(main(false, true)); assertTrue(main(false, true)); %OptimizeFunctionOnNextCall(main); assertFalse(main(false));