[cfe] Handle enum super initializer with super-parameters enabled

This reorganize the handling of super initializers to support
experiments enhanced-enums and super-parameters being enabled
simultaneously. The change also handles non-const enum constructors
when enhanced-enums is not enabled and super initializers in
non-enum classes when enhanced-enums _is_ enabled.

Change-Id: I099736fa9dcd6747060e65c875ff0f3275e9506d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/235021
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 142fef3..6ac5cec 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1875,7 +1875,12 @@
       if (initializers.last is SuperInitializer) {
         SuperInitializer superInitializer =
             initializers.last as SuperInitializer;
-        if (libraryBuilder.enableSuperParametersInLibrary) {
+        if (builder.classBuilder.isEnum) {
+          initializers[initializers.length - 1] = buildInvalidInitializer(
+              buildProblem(fasta.messageEnumConstructorSuperInitializer,
+                  superInitializer.fileOffset, noLength))
+            ..parent = constructor;
+        } else if (libraryBuilder.enableSuperParametersInLibrary) {
           Arguments arguments = superInitializer.arguments;
 
           if (positionalSuperParametersAsArguments != null) {
@@ -1901,11 +1906,6 @@
             arguments.named.addAll(namedSuperParametersAsArguments);
             setParents(namedSuperParametersAsArguments, arguments);
           }
-        } else if (libraryBuilder.enableEnhancedEnumsInLibrary) {
-          initializers[initializers.length - 1] = buildInvalidInitializer(
-              buildProblem(fasta.messageEnumConstructorSuperInitializer,
-                  superInitializer.fileOffset, noLength))
-            ..parent = constructor;
         }
       } else if (initializers.last is RedirectingInitializer) {
         RedirectingInitializer redirectingInitializer =
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index 5376f21..7248daf 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -704,7 +704,8 @@
             arguments = new ArgumentsImpl(enumSyntheticArguments);
             setParents(enumSyntheticArguments, arguments);
             if (constructorBuilder == null ||
-                constructorBuilder is! SourceConstructorBuilder) {
+                constructorBuilder is! SourceConstructorBuilder ||
+                !constructorBuilder.isConst) {
               // This can only occur if there enhanced enum features are used
               // when they are not enabled.
               assert(libraryBuilder.loader.hasSeenError);
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart
new file mode 100644
index 0000000..c21d902
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  int field;
+
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {
+  new B(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..c38913d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A {
+  int field;
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e85d57e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+  A(this.field);
+  int field;
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..03c7d16
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options b/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options
new file mode 100644
index 0000000..3bea431
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/folder.options
@@ -0,0 +1 @@
+--enable-experiment=enhanced-enums,super-parameters
\ No newline at end of file
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart
new file mode 100644
index 0000000..7869a49
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+enum E1 {
+  element;
+
+  E1(); // Error.
+  E1.named(); // Error.
+}
+
+enum E2 {
+  one.named1(),
+  two.named2();
+
+  const E2.named1() : super(); // Error.
+  const E2.named2() : super(42, "42"); // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.strong.transformed.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
new file mode 100644
index 0000000..4aac745
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+enum E1 { element; E1(); E1.named(); }
+enum E2 { one.named1(), two.named2(); const E2.named1() : super(); const E2.named2() : super(42, "42"); }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.modular.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect
new file mode 100644
index 0000000..35667795
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.outline.expect
@@ -0,0 +1,60 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[self::E1::element];
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::one, self::E2::two];
+  static const field self::E2 one = const self::E2::named1(0, "one");
+  static const field self::E2 two = const self::E2::named2(1, "two");
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect
new file mode 100644
index 0000000..d03a931
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart.weak.transformed.expect
@@ -0,0 +1,77 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:8:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   E1.named(); // Error.
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+// Try using a constructor or factory that is 'const'.
+//   element;
+//   ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named1() : super(); // Error.
+//                       ^
+//
+// pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+//   const E2.named2() : super(42, "42"); // Error.
+//                       ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  static const field invalid-type element = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:6:3: Error: Cannot invoke a non-'const' constructor where a const expression is expected.
+Try using a constructor or factory that is 'const'.
+  element;
+  ^";
+  constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  constructor named(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 one = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^";
+  static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^";
+  const constructor named1(core::int index, core::String name) → self::E2
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:16:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named1() : super(); // Error.
+                      ^"
+    ;
+  const constructor named2(core::int index, core::String name) → self::E2
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/enhanced_enums/super_parameters/malformed_constructors.dart:17:23: Error: Enum constructors can't contain super-initializers.
+  const E2.named2() : super(42, \"42\"); // Error.
+                      ^"
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///malformed_constructors.dart:
+- E2.named1 (from org-dartlang-testcase:///malformed_constructors.dart:16:9)
+- E2.named2 (from org-dartlang-testcase:///malformed_constructors.dart:17:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart
new file mode 100644
index 0000000..c21d902
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  int field;
+
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {
+  new B(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.strong.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..c38913d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+class A {
+  int field;
+  A(this.field);
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e85d57e
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+class A {
+  A(this.field);
+  int field;
+}
+
+class B extends A {
+  B(int field) : super(field);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.modular.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..03c7d16
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..779bfc3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/super_parameters/super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  field core::int field;
+  constructor •(core::int field) → self::A
+    : self::A::field = field, super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •(core::int field) → self::B
+    : super self::A::•(field)
+    ;
+}
+static method main() → dynamic {
+  new self::B::•(2);
+}
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart b/pkg/front_end/testcases/general/enum_super_constructor.dart
new file mode 100644
index 0000000..6cab395
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.16
+
+enum A {
+  a;
+  A() : super();
+}
+
+enum B {
+  b;
+  const B() : super();
+}
+
+main() {}
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..5f6cef5
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+// @dart = 2.16
+enum A { a; A() : super(); }
+enum B { b; const B() : super(); }
+main() {}
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.modular.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..ce1a0f0
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.outline.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = const <self::A>[self::A::a];
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = const <self::B>[self::B::b];
+  static const field self::B b = const self::B::•(0, "b");
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..4c629c8
--- /dev/null
+++ b/pkg/front_end/testcases/general/enum_super_constructor.dart.weak.transformed.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:3: Error: Generative enum constructors must be marked as 'const'.
+//   A() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:3: Error: This requires the 'enhanced-enums' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
+//   const B() : super();
+//   ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+//   const B() : super();
+//               ^
+//
+// pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+//   A() : super();
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::A> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  static const field self::A a = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:8:3: Error: Couldn't find constructor 'A'.
+  a;
+  ^";
+  constructor •(core::int index, core::String name) → self::A
+    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:9:9: Error: Enum constructors can't contain super-initializers.
+  A() : super();
+        ^"
+    ;
+  method toString() → core::String
+    return "A.${this.{core::_Enum::_name}{core::String}}";
+}
+class B extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::B> values = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  static const field self::B b = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^";
+  const constructor •(core::int index, core::String name) → self::B
+    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/enum_super_constructor.dart:14:15: Error: Enum constructors can't contain super-initializers.
+  const B() : super();
+              ^"
+    ;
+  method toString() → core::String
+    return "B.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///enum_super_constructor.dart:
+- B. (from org-dartlang-testcase:///enum_super_constructor.dart:14:9)
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index a380aef..e5d43b6 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -50,6 +50,7 @@
 enhanced_enums/simple_fields: FormatterCrash
 enhanced_enums/simple_interfaces: FormatterCrash
 enhanced_enums/simple_mixins: FormatterCrash
+enhanced_enums/super_parameters/malformed_constructors: FormatterCrash
 enhanced_enums/supertype_resolved_before_checking: FormatterCrash
 extension_types/basic_show: FormatterCrash
 extension_types/call_not_get: FormatterCrash
@@ -84,6 +85,7 @@
 general/constructor_initializer_invalid: FormatterCrash
 general/covariant_generic2: FormatterCrash
 general/duplicated_declarations: FormatterCrash
+general/enum_super_constructor: FormatterCrash
 general/error_recovery/annotations: FormatterCrash
 general/error_recovery/constructor_recovery_bad_name_general.crash: FormatterCrash
 general/error_recovery/constructor_recovery_bad_name_get.crash: FormatterCrash