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

// Regression test. Crash occured when trying to create a signature function
// for the non-live 'call' method on the live class 'A'.

import 'package:expect/expect.dart';

class A<T> {
  /// Weird signature to ensure it isn't match by any call selector.
  call(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, {T t}) {}
}

class B<T> {
  @NoInline()
  m(f) => f is Function(T);
}

@NoInline()
create() => new B<A<int>>();

main() {
  var o = create();
  new A();
  Expect.isTrue(o.m((A<int> i) => i));
  Expect.isFalse(o.m((A<String> i) => i));
}
