// 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 --turbo-verify

// This test creates a FrameState node with a DeadValue parent framestate.
// Ensure that deadness is propagated along FrameState edges.

function f1() {
  return this;
}

function f2(x, value, type) {
  x instanceof type
}

function f3(a) {
  a.x = 0;
  if (a.x === 0) {
    a[1] = 0.1;
  }
  class B {
  }
  class C extends B {
    bar() {
      return super.foo()
    }
  }
  B.prototype.foo = f1;
  f2(new C().bar.call(), Object(), String);
}

%PrepareFunctionForOptimization(f3);
f3(new Array(1));
f3(new Array(1));
%OptimizeFunctionOnNextCall(f3);
f3(new Array(1));