// 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.

// @dart = 2.9

// 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;
  T Function(T) field3;
}

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

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>[];
    x.field3 = (int i) => ++i;
  } else {
    x.field1 = 10;
    x.field2 = <int>[];
    x.field3 = (int i) => ++i;
  }
}

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();
}
