//
// Problems in component:
//
// 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);
//             ^
//
library /*isNonNullableByDefault*/;
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}
}
