library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Warning: Getter not found: 'x'.
// var 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
//                                  ^
//
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::•(throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C1, 33, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))));
static field dynamic c1 = <dynamic>[throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#C1, 33, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4)))];
static field dynamic c2 = #C3;
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 {}

constants  {
  #C1 = #x
  #C2 = <core::Type*>[]
  #C3 = <dynamic>[]
  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
}
