library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue40982.dart:28:9: Error: A constant constructor can't call a non-constant super constructor.
//   const E1();
//         ^
//
// pkg/front_end/testcases/general/issue40982.dart:34:9: Error: A constant constructor can't call a non-constant super constructor.
//   const E3();
//         ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object /*hasConstConstructor*/  {
  const constructor •() → self::A
    : super core::Object::•()
    ;
}
abstract class B extends core::Object /*isMixinDeclaration*/  {
  static const field core::int value = #C1;
}
abstract class _C1&A&B = self::A with self::B /*isAnonymousMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_C1&A&B
    : super self::A::•()
    ;
}
class C1 extends self::_C1&A&B /*hasConstConstructor*/  {
  const constructor •() → self::C1
    : super self::_C1&A&B::•()
    ;
}
class C2 = self::A with self::B /*hasConstConstructor*/  {
  const synthetic constructor •() → self::C2
    : super self::A::•()
    ;
}
class C3 extends self::C2 /*hasConstConstructor*/  {
  const constructor •() → self::C3
    : super self::C2::•()
    ;
}
abstract class D extends core::Object /*isMixinDeclaration*/  {
  field core::int value = 1;
}
abstract class _E1&A&D = self::A with self::D /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_E1&A&D
    : super self::A::•()
    ;
  mixin-super-stub get value() → core::int
    return super.{self::D::value};
  mixin-super-stub set value(core::int value) → void
    return super.{self::D::value} = value;
}
class E1 extends self::_E1&A&D /*hasConstConstructor*/  {
  const constructor •() → self::E1
    : super self::_E1&A&D::•()
    ;
}
class E2 = self::A with self::D {
  synthetic constructor •() → self::E2
    : super self::A::•()
    ;
  mixin-super-stub get value() → core::int
    return super.{self::D::value};
  mixin-super-stub set value(core::int value) → void
    return super.{self::D::value} = value;
}
class E3 extends self::E2 /*hasConstConstructor*/  {
  const constructor •() → self::E3
    : super self::E2::•()
    ;
}
static method main() → dynamic {}

constants  {
  #C1 = 1
}
