// 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 field;
}

// Class with a single type parameter
class B<T> {
  T field;
}

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.field = 10;
  } else {
    x.field = 10;
  }
}

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