// Unhandled 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 {}
