[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;