library test;
import self as self;
import "./infer_type_regardless_of_declaration_order_or_cycles_b.dart" as inf;
import "dart:core" as core;

class C extends inf::B {
  synthetic constructor •() → void
    : super inf::B::•()
    ;
  get x() → core::int
    return null;
}
class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  get x() → core::int
    return 0;
}
static method foo() → dynamic {
  core::int y = new self::C::•().{self::C::x};
  core::String z = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart:20:69: Error: A value of type 'dart.core::int' can't be assigned to a variable of type 'dart.core::String'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::String'.
  String z = /*error:INVALID_ASSIGNMENT*/ new C(). /*@target=C::x*/ x;
                                                                    ^" in let final dynamic #t2 = new self::C::•().{self::C::x} in null;
}
static method main() → dynamic {
  self::foo();
}
