// 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 --opt --no-always-opt

function f(x) {
  %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));
