// Formatted problems:
//
// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:61: Warning: Getter not found: 'x'.
// var /*@topType=B*/ b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
//                                                             ^
//
// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Warning: Getter not found: 'x'.
//   /*error:UNDEFINED_IDENTIFIER*/ x
//                                  ^

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

class A extends core::Object {
  field core::int x = null;
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  operator +(dynamic other) → self::B
    return null;
}
class B extends self::A {
  constructor •(dynamic ignore) → self::B
    : super self::A::•()
    ;
}
static field dynamic a = new self::A::•();
static field dynamic b = new self::B::•(let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))));
static field dynamic c1 = <dynamic>[let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#x, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{})))];
static field dynamic c2 = const <dynamic>[];
static field dynamic d = <dynamic, dynamic>{"a": "b"};
static field dynamic e = let final dynamic #t1 = new self::A::•() in let final dynamic #t2 = #t1.x = 3 in #t1;
static field dynamic f = 2.+(3);
static field dynamic g = 3.unary-();
static field dynamic h = new self::A::•().+(3);
static field dynamic i = new self::A::•().unary-();
static field dynamic j = null as self::B;
static method test1() → dynamic {
  self::a = "hi";
  self::a = new self::B::•(3);
  self::b = "hi";
  self::b = new self::B::•(3);
  self::c1 = <dynamic>[];
  self::c1 = <dynamic, dynamic>{};
  self::c2 = <dynamic>[];
  self::c2 = <dynamic, dynamic>{};
  self::d = <dynamic, dynamic>{};
  self::d = 3;
  self::e = new self::A::•();
  self::e = <dynamic, dynamic>{};
  self::f = 3;
  self::f = false;
  self::g = 1;
  self::g = false;
  self::h = false;
  self::h = new self::B::•("b");
  self::i = false;
  self::j = new self::B::•("b");
  self::j = false;
  self::j = <dynamic>[];
}
static method main() → dynamic {}
