// Copyright (c) 2018, 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.

// Test checking that canonicalization rules for AssertAssignable IL
// instructions take into account that these instructions can be
// on unreachable code paths.

// Class with two type parameters.
class A<U, T> {
  T field1;
  List<T> field2;
}

// Class with a single type parameter
class B<T> {
  T field1;
  List<T> field2;
}

var TRUE = true;

void foo(bool f) {
  dynamic x = f ? new B<int>() : new A<String, int>();
  if (f == TRUE) {
    // Prevent constant folding by accessing a global
    x.field1 = 10;
    x.field2 = <int>[];
  } else {
    x.field1 = 10;
    x.field2 = <int>[];
  }
}

void bar() {
  // When foo() is inlined into bar() a graph where
  // allocation of B will flow into code-path that
  // expects A will arise. On that code-path (which
  // is dynamically unreachable because it is guarded
  // by CheckClass) there will be an assert assignable
  // against A.T.
  // Canonicalization rule should not crash when it tries
  // to instantiate this type.
  foo(true);
}

void main() {
  // Execute both paths to populate ICData.
  foo(true);
  foo(false);

  // Force optimization of bar().
  for (var i = 0; i < 100000; i++) bar();
}
