// Errors:
//
// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:67: Error: Can't infer the type of 'b': circularity found during type inference.
// Specify the type explicitly.
// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = a();
//                                                                   ^
//
// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:67: Error: Can't infer the type of 'a': circularity found during type inference.
// Specify the type explicitly.
// var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ a = /*@returnType=num*/ () =>
//                                                                   ^

library test;
import self as self;
import "dart:core" as core;

static field core::int intValue = 0;
static field core::num numValue = 0;
static field core::double doubleValue = 0.0;
static field dynamic a = () → core::num => self::intValue.{core::num::+}(self::b as{TypeError} core::num);
static field dynamic b = self::a.call();
static field () → core::num c = () → core::num => self::numValue.{core::num::+}(self::d);
static field core::num d = self::c.call();
static field () → core::double e = () → core::double => self::doubleValue.{core::double::+}(self::f);
static field core::double f = self::e.call();
static method main() → dynamic {}
