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

/*@testedFeatures=inference*/
library test;

int intValue = 0;
num numValue = 0;
double doubleValue = 0.0;

// There's a circularity between a and b because the type of `int + x` depends
// on the type of x.

var a = /*@returnType=num*/ () => intValue /*@target=num::+*/ + b;
var b = a();

// But there's no circularity between c and d because the type of `num + x` is
// always num.

var c = /*@returnType=num*/ () => numValue /*@target=num::+*/ + d;
var d = c();

// Similar for double.

var e = /*@returnType=double*/ () => doubleValue /*@target=double::+*/ + f;
var f = e();

main() {}
