library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/null_check.dart:14:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c!.field;
//   ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:15:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c!.field = 42;
//   ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:16:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c!.method;
//   ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:17:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c!.method();
//   ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:18:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c!.field!.toString();
//   ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:19:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c!.method()!.toString();
//   ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:20:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c! + c;
//   ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:21:3: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c! + c!;
//   ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:21:8: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c! + c!;
//        ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:22:7: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   c + c!;
//       ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:23:6: Warning: Operand of null-aware operation '!' has type 'Class' which excludes null.
//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_check.dart'.
//   (c + c)!;
//      ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:26:10: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
//   !o! ? !o! : !!o!!;
//          ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:26:17: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
//   !o! ? !o! : !!o!!;
//                 ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:26:18: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
//   !o! ? !o! : !!o!!;
//                  ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:27:5: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
//   !(o!) ? (!o)! : (!(!o)!)!;
//     ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:27:12: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
//   !(o!) ? (!o)! : (!(!o)!)!;
//            ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:27:22: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
//   !(o!) ? (!o)! : (!(!o)!)!;
//                      ^
//
// pkg/front_end/testcases/nnbd/null_check.dart:27:20: Warning: Operand of null-aware operation '!' has type 'bool' which excludes null.
//   !(o!) ? (!o)! : (!(!o)!)!;
//                    ^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object {
  field core::int? field = null;
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  method method() → core::int?
    return this.{self::Class::field}{core::int?};
  operator +(self::Class other) → self::Class
    return new self::Class::•();
}
static method main() → dynamic {
  self::Class? c = new self::Class::•();
  c!;
  c{self::Class}!.{self::Class::field}{core::int?};
  c{self::Class}!.{self::Class::field} = 42;
  c{self::Class}!.{self::Class::method}{() → core::int?};
  c{self::Class}!.{self::Class::method}(){() → core::int?};
  c{self::Class}!.{self::Class::field}{core::int?}!.{core::int::toString}(){() → core::String};
  c{self::Class}!.{self::Class::method}(){() → core::int?}!.{core::int::toString}(){() → core::String};
  c{self::Class}!.{self::Class::+}(c{self::Class}){(self::Class) → self::Class};
  c{self::Class}!.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
  c{self::Class}.{self::Class::+}(c{self::Class}!){(self::Class) → self::Class};
  c{self::Class}.{self::Class::+}(c{self::Class}){(self::Class) → self::Class}!;
  core::bool? o = true;
  !o! ?{core::bool} !o{core::bool}! : !!o{core::bool}!!;
  !o{core::bool}! ?{core::bool} (!o{core::bool})! : (!(!o{core::bool})!)!;
}
