// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.7

/// Regression test for Issue #40349:
///
/// Before the fix, this code was accidentally generating a type check twice.
/// In between the two checks, code to update `_foo` was overriding a temporary
/// variable used by the check subexpression, which made the code for the
/// second check invalid.
///
/// The second check should not have been generated, but it was emitted due to
/// a broken invariant of the SSA generate-at-use logic.

void main() {
  // `x` which is used multiple times after inlining, so a temporary is used.
  x.method(40);
}

dynamic x = Wrapper<int>();

class A<E> {
  int _foo = 0;
  List<E> list = [null];

  @pragma('dart2js:tryInline')
  void internalMethod(E value) {
    // The update and use of `_foo` requires a separate temporary which reuses
    // the same variable given to `x` (technically `x` is no longer live).
    _foo = (_foo + 1) & 0;

    // This use of `value` accidentally contains the second check, which
    // still refers to the temporary assuming it was `x` and not `_foo`.
    list[_foo] = value;
  }
}

class Wrapper<T> {
  A<T> a = A<T>();

  @pragma('dart2js:tryInline')
  method(T t) => a.internalMethod(t);
}
