library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Error: Constant evaluation error:
// const int? d = c!;
//                 ^
// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Context: Constant expression must be non-null.
// const int? d = c!;
//                 ^
// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:12: Context: While analyzing:
// const int? d = c!;
//            ^
//
// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:23: Error: Constant evaluation error:
// const Class f = const Class(c);
//                       ^
// pkg/front_end/testcases/nnbd/constant_null_check.dart:13:30: Context: Constant expression must be non-null.
//   const Class(int? x) : y = x!;
//                              ^
// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:13: Context: While analyzing:
// const Class f = const Class(c);
//             ^
//
import self as self;
import "dart:core" as core;

class Class extends core::Object /*hasConstConstructor*/  {
  final field core::int y;
  const constructor •(core::int? x) → self::Class
    : self::Class::y = x!, super core::Object::•()
    ;
}
static const field core::int? a = #C1;
static const field core::int b = #C1;
static const field core::int? c = #C2;
static const field core::int? d = invalid-expression "Constant expression must be non-null.";
static const field self::Class e = #C3;
static const field self::Class f = invalid-expression "Constant expression must be non-null.";
static method main() → dynamic {
  self::expect(42, #C1);
  self::expect(42, #C1);
  self::expect(42, (#C3).{self::Class::y});
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!expected.{core::Object::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}

constants  {
  #C1 = 42
  #C2 = null
  #C3 = self::Class {y:#C1}
}


Constructor coverage from constants:
org-dartlang-testcase:///constant_null_check.dart:
- Class. (from org-dartlang-testcase:///constant_null_check.dart:13:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
