// Formatted problems:
//
// 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*/ () =>
//                                                                   ^

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