blob: d00bc67cdd1c762fa89170dd72493ad662e8946a [file] [log] [blame]
// Copyright (c) 2017, 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
/*@testedFeatures=inference*/
library test;
class A {
T f<T>(T t) => t;
int g(dynamic i) => 0;
}
var a = new A();
// There's a circularity between b and c because a.f is generic, so the type of
// c is required to infer b, and vice versa.
var b = /*@ returnType=() ->* invalid-type */ () =>
a. /*@ typeArgs=() ->* invalid-type */ /*@target=A.f*/ f(c);
var c = /*@ returnType=invalid-type */ () =>
a. /*@ typeArgs=invalid-type */ /*@target=A.f*/ f(b);
// e's use of a.g breaks the circularity, because a.g is not generic, therefore
// the type of e does not depend on the type of d.
var d = /*@ returnType=() ->* int* */ () =>
a. /*@ typeArgs=() ->* int* */ /*@target=A.f*/ f(e);
var e = /*@ returnType=int* */ () => a. /*@target=A.g*/ g(d);
main() {}