[CFE] Fix crash on extension type with duplicate name (2)

Change-Id: Id0464bbabbcbc535761acd5b2cc0082ffb8ad6b0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/397800
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/front_end/lib/src/source/source_builder_mixins.dart b/pkg/front_end/lib/src/source/source_builder_mixins.dart
index 637b40c..55dc90c 100644
--- a/pkg/front_end/lib/src/source/source_builder_mixins.dart
+++ b/pkg/front_end/lib/src/source/source_builder_mixins.dart
@@ -231,6 +231,9 @@
           }
           addMemberDescriptorInternal(
               memberBuilder, memberKind, memberReference, tearOffReference);
+        } else {
+          // Still set parent to avoid crashes.
+          member.parent = libraryBuilder.library;
         }
       }
     }
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.modular.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.modular.expect
deleted file mode 100644
index 0493c93..0000000
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.modular.expect
+++ /dev/null
@@ -1,22 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
-// extension type DuplicateName._(int _x){
-//                ^^^^^^^^^^^^^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:5:5: Context: Previous declaration of 'DuplicateName'.
-// int DuplicateName = 42;
-//     ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
-import self as self;
-import "dart:core" as core;
-
-static field core::int DuplicateName = 42;
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.transformed.expect
deleted file mode 100644
index 0493c93..0000000
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.transformed.expect
+++ /dev/null
@@ -1,22 +0,0 @@
-library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
-// extension type DuplicateName._(int _x){
-//                ^^^^^^^^^^^^^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:5:5: Context: Previous declaration of 'DuplicateName'.
-// int DuplicateName = 42;
-//     ^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Error: 'DuplicateName' isn't a type.
-//   int get bar => 42;
-//           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Context: This isn't a type.
-//   int get bar => 42;
-//           ^
-//
-import self as self;
-import "dart:core" as core;
-
-static field core::int DuplicateName = 42;
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart
similarity index 87%
rename from pkg/front_end/testcases/regress/extension_type_duplicate_name.dart
rename to pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart
index 50f2c51..4815550 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart
@@ -4,7 +4,7 @@
 
 int DuplicateName = 42;
 
-extension type DuplicateName._(int _x){
+extension type DuplicateName._(int _x) {
   DuplicateName(this._x) {
     bar;
   }
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.expect
similarity index 66%
rename from pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect
rename to pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.expect
index 0493c93..21cf490 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
-// extension type DuplicateName._(int _x){
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
+// extension type DuplicateName._(int _x) {
 //                ^^^^^^^^^^^^^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:5:5: Context: Previous declaration of 'DuplicateName'.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:5:5: Context: Previous declaration of 'DuplicateName'.
 // int DuplicateName = 42;
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Error: 'DuplicateName' isn't a type.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Error: 'DuplicateName' isn't a type.
 //   int get bar => 42;
 //           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Context: This isn't a type.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Context: This isn't a type.
 //   int get bar => 42;
 //           ^
 //
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.modular.expect
similarity index 66%
copy from pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect
copy to pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.modular.expect
index 0493c93..21cf490 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.modular.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
-// extension type DuplicateName._(int _x){
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
+// extension type DuplicateName._(int _x) {
 //                ^^^^^^^^^^^^^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:5:5: Context: Previous declaration of 'DuplicateName'.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:5:5: Context: Previous declaration of 'DuplicateName'.
 // int DuplicateName = 42;
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Error: 'DuplicateName' isn't a type.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Error: 'DuplicateName' isn't a type.
 //   int get bar => 42;
 //           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Context: This isn't a type.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Context: This isn't a type.
 //   int get bar => 42;
 //           ^
 //
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.outline.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.outline.expect
similarity index 66%
rename from pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.outline.expect
rename to pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.outline.expect
index 47b0520..c0c0414 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.outline.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.outline.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
-// extension type DuplicateName._(int _x){
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
+// extension type DuplicateName._(int _x) {
 //                ^^^^^^^^^^^^^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:5:5: Context: Previous declaration of 'DuplicateName'.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:5:5: Context: Previous declaration of 'DuplicateName'.
 // int DuplicateName = 42;
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Error: 'DuplicateName' isn't a type.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Error: 'DuplicateName' isn't a type.
 //   int get bar => 42;
 //           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Context: This isn't a type.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Context: This isn't a type.
 //   int get bar => 42;
 //           ^
 //
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.transformed.expect
similarity index 66%
copy from pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect
copy to pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.transformed.expect
index 0493c93..21cf490 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.strong.transformed.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
-// extension type DuplicateName._(int _x){
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
+// extension type DuplicateName._(int _x) {
 //                ^^^^^^^^^^^^^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:5:5: Context: Previous declaration of 'DuplicateName'.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:5:5: Context: Previous declaration of 'DuplicateName'.
 // int DuplicateName = 42;
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Error: 'DuplicateName' isn't a type.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Error: 'DuplicateName' isn't a type.
 //   int get bar => 42;
 //           ^
-// pkg/front_end/testcases/regress/extension_type_duplicate_name.dart:11:11: Context: This isn't a type.
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart:11:11: Context: This isn't a type.
 //   int get bar => 42;
 //           ^
 //
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.textual_outline.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.textual_outline.expect
similarity index 100%
rename from pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.textual_outline.expect
rename to pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.textual_outline.expect
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.textual_outline_modelled.expect
similarity index 100%
rename from pkg/front_end/testcases/regress/extension_type_duplicate_name.dart.textual_outline_modelled.expect
rename to pkg/front_end/testcases/regress/extension_type_duplicate_name_01.dart.textual_outline_modelled.expect
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart
similarity index 76%
copy from pkg/front_end/testcases/regress/extension_type_duplicate_name.dart
copy to pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart
index 50f2c51..5942e82 100644
--- a/pkg/front_end/testcases/regress/extension_type_duplicate_name.dart
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart
@@ -4,9 +4,7 @@
 
 int DuplicateName = 42;
 
-extension type DuplicateName._(int _x){
-  DuplicateName(this._x) {
-    bar;
-  }
+extension type DuplicateName._(int _x) {
+  static set bar(int newBar) {}
   int get bar => 42;
 }
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.expect
new file mode 100644
index 0000000..493ec09
--- /dev/null
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.expect
@@ -0,0 +1,37 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
+// extension type DuplicateName._(int _x) {
+//                ^^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:5:5: Context: Previous declaration of 'DuplicateName'.
+// int DuplicateName = 42;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: 'DuplicateName' isn't a type.
+//   int get bar => 42;
+//           ^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This isn't a type.
+//   int get bar => 42;
+//           ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: Conflicts with member 'bar'.
+//   static set bar(int newBar) {}
+//              ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: Conflicts with setter 'bar'.
+//   int get bar => 42;
+//           ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: This static member conflicts with an instance member.
+//   static set bar(int newBar) {}
+//              ^^^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This is the instance member.
+//   int get bar => 42;
+//           ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int DuplicateName = 42;
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.modular.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.modular.expect
new file mode 100644
index 0000000..493ec09
--- /dev/null
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.modular.expect
@@ -0,0 +1,37 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
+// extension type DuplicateName._(int _x) {
+//                ^^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:5:5: Context: Previous declaration of 'DuplicateName'.
+// int DuplicateName = 42;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: 'DuplicateName' isn't a type.
+//   int get bar => 42;
+//           ^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This isn't a type.
+//   int get bar => 42;
+//           ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: Conflicts with member 'bar'.
+//   static set bar(int newBar) {}
+//              ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: Conflicts with setter 'bar'.
+//   int get bar => 42;
+//           ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: This static member conflicts with an instance member.
+//   static set bar(int newBar) {}
+//              ^^^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This is the instance member.
+//   int get bar => 42;
+//           ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int DuplicateName = 42;
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.outline.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.outline.expect
new file mode 100644
index 0000000..7f85d8c
--- /dev/null
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.outline.expect
@@ -0,0 +1,37 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
+// extension type DuplicateName._(int _x) {
+//                ^^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:5:5: Context: Previous declaration of 'DuplicateName'.
+// int DuplicateName = 42;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: 'DuplicateName' isn't a type.
+//   int get bar => 42;
+//           ^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This isn't a type.
+//   int get bar => 42;
+//           ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: Conflicts with member 'bar'.
+//   static set bar(int newBar) {}
+//              ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: Conflicts with setter 'bar'.
+//   int get bar => 42;
+//           ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: This static member conflicts with an instance member.
+//   static set bar(int newBar) {}
+//              ^^^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This is the instance member.
+//   int get bar => 42;
+//           ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int DuplicateName;
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.transformed.expect
new file mode 100644
index 0000000..493ec09
--- /dev/null
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.strong.transformed.expect
@@ -0,0 +1,37 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:7:16: Error: 'DuplicateName' is already declared in this scope.
+// extension type DuplicateName._(int _x) {
+//                ^^^^^^^^^^^^^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:5:5: Context: Previous declaration of 'DuplicateName'.
+// int DuplicateName = 42;
+//     ^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: 'DuplicateName' isn't a type.
+//   int get bar => 42;
+//           ^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This isn't a type.
+//   int get bar => 42;
+//           ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: Conflicts with member 'bar'.
+//   static set bar(int newBar) {}
+//              ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Error: Conflicts with setter 'bar'.
+//   int get bar => 42;
+//           ^
+//
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:8:14: Error: This static member conflicts with an instance member.
+//   static set bar(int newBar) {}
+//              ^^^
+// pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart:9:11: Context: This is the instance member.
+//   int get bar => 42;
+//           ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+static field core::int DuplicateName = 42;
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.textual_outline.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.textual_outline.expect
new file mode 100644
index 0000000..5c082ad
--- /dev/null
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+int DuplicateName = 42;
+
+extension type DuplicateName._(int _x) {
+  static set bar(int newBar) {}
+  int get bar => 42;
+}
diff --git a/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f18e328
--- /dev/null
+++ b/pkg/front_end/testcases/regress/extension_type_duplicate_name_02.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+extension type DuplicateName._(int _x) {
+  int get bar => 42;
+  static set bar(int newBar) {}
+}
+
+int DuplicateName = 42;