Version 2.17.0-94.0.dev

Merge commit '4fb3d2afcf424ff3f73d55fc1585c448cdaa8762' into 'dev'
diff --git a/DEPS b/DEPS
index a6780e6..17285f6 100644
--- a/DEPS
+++ b/DEPS
@@ -115,7 +115,7 @@
   "fixnum_rev": "848341f061359ef7ddc0cad472c2ecbb036b28ac",
   "file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
   "glob_rev": "da1f4595ee2f87982cbcc663d4cac244822d9227",
-  "html_rev": "00cd3c22dac0e68e6ed9e7e4945101aedb1b3109",
+  "html_rev": "3c2448108b431dd00d3a7033d9f43f19fa5d93d3",
   "http_io_rev": "2fa188caf7937e313026557713f7feffedd4978b",
   "http_multi_server_rev": "34bf7f04b61cce561f47f7f275c2cc811534a05a",
   "http_parser_rev": "202391286ddc13c4c3c284ac5b511f04697250ed",
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 64be4e9..9b829c7 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -242,7 +242,8 @@
   if (kind == engine.MatchKind.WRITE) {
     return SearchResultKind.WRITE;
   }
-  if (kind == engine.MatchKind.INVOCATION) {
+  if (kind == engine.MatchKind.INVOCATION ||
+      kind == engine.MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS) {
     return SearchResultKind.INVOCATION;
   }
   if (kind == engine.MatchKind.REFERENCE ||
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
index 297bf72..6f25968 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
@@ -38,6 +38,8 @@
         await _forFunctionTypedFormalParameter(builder, node, parent);
       } else if (node is SimpleIdentifier && parent is FieldFormalParameter) {
         await _forFieldFormalParameter(builder, node, parent);
+      } else if (node is SimpleIdentifier && parent is SuperFormalParameter) {
+        await _forSuperFormalParameter(builder, node, parent);
       } else if (node is Expression &&
           parent is AssignmentExpression &&
           parent.rightHandSide == node) {
@@ -164,6 +166,31 @@
     });
   }
 
+  /// Makes [parameter] nullable if possible.
+  Future<void> _forSuperFormalParameter(ChangeBuilder builder,
+      SimpleIdentifier name, SuperFormalParameter parameter) async {
+    if (parameter.parameters != null) {
+      // A function-typed field formal parameter.
+      if (parameter.question != null) {
+        return;
+      }
+      _variableName = parameter.identifier.name;
+      await builder.addDartFileEdit(file, (builder) {
+        // Add '?' after `)`.
+        builder.addSimpleInsertion(parameter.endToken.end, '?');
+      });
+    } else {
+      var type = parameter.type;
+      if (type == null || !_typeCanBeMadeNullable(type)) {
+        return;
+      }
+      _variableName = parameter.identifier.name;
+      await builder.addDartFileEdit(file, (builder) {
+        builder.addSimpleInsertion(type.end, '?');
+      });
+    }
+  }
+
   Future<void> _forVariableDeclaration(ChangeBuilder builder, Expression node,
       VariableDeclaration parent) async {
     var declarationList = parent.parent;
diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt b/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt
index d4e0bf5..d19627a 100644
--- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt
+++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.txt
@@ -369,7 +369,7 @@
 CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER: needs evaluation
 CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED: needs fix; new in 2.17
 CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED: needs evaluation; new in 2.17
-CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL: needs fix; new in 2.17
+CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL: needs fix; https://github.com/dart-lang/sdk/issues/48359
 CompileTimeErrorCode.SUPER_IN_EXTENSION: needs evaluation
 CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT: needs evaluation
 CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR: needs evaluation
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine.dart b/pkg/analysis_server/lib/src/services/search/search_engine.dart
index 362216e..09df9a4 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine.dart
@@ -23,6 +23,11 @@
   /// A reference to an element in which it is being invoked.
   static const MatchKind INVOCATION = MatchKind('INVOCATION');
 
+  /// An invocation of an enum constructor from an enum constant without
+  /// arguments.
+  static const MatchKind INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS =
+      MatchKind('INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS');
+
   /// A reference to an element in which it is referenced.
   static const MatchKind REFERENCE = MatchKind('REFERENCE');
 
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
index 059c23e98..2eda0d4 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
@@ -242,6 +242,10 @@
     if (kind == SearchResultKind.INVOCATION) {
       return MatchKind.INVOCATION;
     }
+    if (kind ==
+        SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS) {
+      return MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS;
+    }
     if (kind == SearchResultKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF) {
       return MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF;
     }
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 3598517..8ca77d4 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -347,19 +347,7 @@
     assertHasRegion('myan // ref');
   }
 
-  Future<void> test_class_fromSDK() async {
-    addTestFile('''
-int V = 42;
-''');
-    await prepareNavigation();
-    assertHasRegion('int V');
-    var targetIndex = testTargetIndexes[0];
-    var target = targets[targetIndex];
-    expect(target.startLine, greaterThan(0));
-    expect(target.startColumn, greaterThan(0));
-  }
-
-  Future<void> test_constructor_named() async {
+  Future<void> test_class_constructor_named() async {
     addTestFile('''
 class A {
   A.named(BBB p) {}
@@ -377,7 +365,7 @@
     assertHasRegionTarget('BBB p', 'BBB {}');
   }
 
-  Future<void> test_constructor_unnamed() async {
+  Future<void> test_class_constructor_unnamed() async {
     addTestFile('''
 class A {
   A(BBB p) {}
@@ -392,7 +380,7 @@
     assertHasRegionTarget('BBB p', 'BBB {}');
   }
 
-  Future<void> test_constructorReference_named() async {
+  Future<void> test_class_constructorReference_named() async {
     addTestFile('''
 class A {}
 class B<T> {
@@ -408,7 +396,7 @@
     assertHasRegionTarget('A>', 'A {}');
   }
 
-  Future<void> test_constructorReference_unnamed_declared() async {
+  Future<void> test_class_constructorReference_unnamed_declared() async {
     addTestFile('''
 class A {
   A();
@@ -422,7 +410,7 @@
     assertHasRegionTarget('new;', 'A();', targetLength: 0);
   }
 
-  Future<void> test_constructorReference_unnamed_declared_new() async {
+  Future<void> test_class_constructorReference_unnamed_declared_new() async {
     addTestFile('''
 class A {
   A.new();
@@ -436,7 +424,7 @@
     assertHasRegionTarget('new;', 'new();');
   }
 
-  Future<void> test_constructorReference_unnamed_default() async {
+  Future<void> test_class_constructorReference_unnamed_default() async {
     addTestFile('''
 class A {}
 void f() {
@@ -448,55 +436,7 @@
     assertHasRegionTarget('new;', 'A {}');
   }
 
-  Future<void> test_enum_constant() async {
-    addTestFile('''
-enum E { a, b }
-void f() {
-  E.a;
-}
-''');
-    await prepareNavigation();
-    assertHasRegion('a;');
-    assertHasTarget('a,');
-  }
-
-  Future<void> test_enum_index() async {
-    addTestFile('''
-enum E { a, b }
-void f() {
-  E.a.index;
-}
-''');
-    await prepareNavigation();
-    assertHasRegion('index');
-    assertHasTarget('E {');
-  }
-
-  Future<void> test_enum_values() async {
-    addTestFile('''
-enum E { a, b }
-void f() {
-  E.values;
-}
-''');
-    await prepareNavigation();
-    assertHasRegion('values');
-    assertHasTarget('E');
-  }
-
-  Future<void> test_extension_on() async {
-    addTestFile('''
-class C //1
-{}
-extension E on C //2
-{}
-''');
-    await prepareNavigation();
-    assertHasRegion('C //2');
-    assertHasTarget('C //1');
-  }
-
-  Future<void> test_factoryRedirectingConstructor_implicit() async {
+  Future<void> test_class_factoryRedirectingConstructor_implicit() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -510,7 +450,7 @@
   }
 
   Future<void>
-      test_factoryRedirectingConstructor_implicit_withTypeArgument() async {
+      test_class_factoryRedirectingConstructor_implicit_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -529,7 +469,7 @@
     }
   }
 
-  Future<void> test_factoryRedirectingConstructor_named() async {
+  Future<void> test_class_factoryRedirectingConstructor_named() async {
     addTestFile('''
 class A {
   factory A() = B.named;
@@ -550,7 +490,7 @@
   }
 
   Future<void>
-      test_factoryRedirectingConstructor_named_withTypeArgument() async {
+      test_class_factoryRedirectingConstructor_named_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -575,7 +515,7 @@
     }
   }
 
-  Future<void> test_factoryRedirectingConstructor_unnamed() async {
+  Future<void> test_class_factoryRedirectingConstructor_unnamed() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -590,7 +530,7 @@
   }
 
   Future<void>
-      test_factoryRedirectingConstructor_unnamed_withTypeArgument() async {
+      test_class_factoryRedirectingConstructor_unnamed_withTypeArgument() async {
     addTestFile('''
 class A {}
 class B {
@@ -611,7 +551,7 @@
     }
   }
 
-  Future<void> test_factoryRedirectingConstructor_unresolved() async {
+  Future<void> test_class_factoryRedirectingConstructor_unresolved() async {
     addTestFile('''
 class A {
   factory A() = B;
@@ -621,7 +561,7 @@
     // don't check regions, but there should be no exceptions
   }
 
-  Future<void> test_fieldFormalParameter() async {
+  Future<void> test_class_fieldFormalParameter() async {
     addTestFile('''
 class AAA {
   int fff = 123;
@@ -632,7 +572,7 @@
     assertHasRegionTarget('fff);', 'fff = 123');
   }
 
-  Future<void> test_fieldFormalParameter_unresolved() async {
+  Future<void> test_class_fieldFormalParameter_unresolved() async {
     addTestFile('''
 class AAA {
   AAA(this.fff);
@@ -642,6 +582,113 @@
     assertNoRegion('fff);', 3);
   }
 
+  Future<void> test_class_fromSDK() async {
+    addTestFile('''
+int V = 42;
+''');
+    await prepareNavigation();
+    assertHasRegion('int V');
+    var targetIndex = testTargetIndexes[0];
+    var target = targets[targetIndex];
+    expect(target.startLine, greaterThan(0));
+    expect(target.startColumn, greaterThan(0));
+  }
+
+  Future<void> test_enum_constant() async {
+    addTestFile('''
+enum E { a, b }
+void f() {
+  E.a;
+}
+''');
+    await prepareNavigation();
+    assertHasRegion('a;');
+    assertHasTarget('a,');
+  }
+
+  Future<void> test_enum_constructor_named() async {
+    addTestFile('''
+const a = 0;
+
+enum E<T> {
+  v<int>.named(a); // 1
+  E.named(int _) {}
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegionTarget('v<int', 'named(int');
+    assertHasRegion('int>');
+    assertHasRegionTarget('named(a); // 1', 'named(int');
+    assertHasRegionTarget('a); // 1', 'a = 0');
+
+    assertHasRegion('int _');
+  }
+
+  Future<void> test_enum_constructor_unnamed() async {
+    addTestFile('''
+enum E {
+  v1,
+  v2(),
+  v3.new();
+  const E();
+}
+''');
+    await prepareNavigation();
+
+    assertHasRegionTarget('v1', 'E();', targetLength: 0);
+    assertHasRegionTarget('v2()', 'E();', targetLength: 0);
+    assertHasRegionTarget('v3', 'E();', targetLength: 0);
+    assertHasRegionTarget('new()', 'E();', targetLength: 0);
+  }
+
+  Future<void> test_enum_index() async {
+    addTestFile('''
+enum E { a, b }
+void f() {
+  E.a.index;
+}
+''');
+    await prepareNavigation();
+    assertHasRegion('index');
+    assertHasTarget('E {');
+  }
+
+  Future<void> test_enum_typeParameter() async {
+    addTestFile('''
+enum E<T> {
+  v(0);
+  const E(T t);
+}
+''');
+    await prepareNavigation();
+    assertHasRegionTarget('T t', 'T>');
+  }
+
+  Future<void> test_enum_values() async {
+    addTestFile('''
+enum E { a, b }
+void f() {
+  E.values;
+}
+''');
+    await prepareNavigation();
+    assertHasRegion('values');
+    assertHasTarget('E');
+  }
+
+  Future<void> test_extension_on() async {
+    addTestFile('''
+class C //1
+{}
+extension E on C //2
+{}
+''');
+    await prepareNavigation();
+    assertHasRegion('C //2');
+    assertHasTarget('C //1');
+  }
+
   Future<void> test_functionReference_className_staticMethod() async {
     addTestFile('''
 class A {
diff --git a/pkg/analysis_server/test/protocol_server_test.dart b/pkg/analysis_server/test/protocol_server_test.dart
index 83f3e8f..02e6971 100644
--- a/pkg/analysis_server/test/protocol_server_test.dart
+++ b/pkg/analysis_server/test/protocol_server_test.dart
@@ -256,6 +256,8 @@
     // use SearchResultKind inside the analysis server?
     EnumTester<MatchKind, SearchResultKind>()
         .run(newSearchResultKind_fromEngine, exceptions: {
+      MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS:
+          SearchResultKind.INVOCATION,
       MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF: SearchResultKind.REFERENCE,
     });
   }
diff --git a/pkg/analysis_server/test/search/element_references_test.dart b/pkg/analysis_server/test/search/element_references_test.dart
index 326a8eb..85ebbb8 100644
--- a/pkg/analysis_server/test/search/element_references_test.dart
+++ b/pkg/analysis_server/test/search/element_references_test.dart
@@ -40,7 +40,7 @@
     }
   }
 
-  Future<void> test_constructor_named() async {
+  Future<void> test_class_constructor_named() async {
     addTestFile('''
 /// [new A.named] 1
 class A {
@@ -69,7 +69,7 @@
     assertHasResult(SearchResultKind.REFERENCE, '.named; // 6', 6);
   }
 
-  Future<void> test_constructor_named_potential() async {
+  Future<void> test_class_constructor_named_potential() async {
     // Constructors in other classes shouldn't be considered potential matches.
     // Unresolved method calls should also not be considered potential matches,
     // because constructor call sites are statically bound to their targets.
@@ -92,7 +92,7 @@
     assertHasResult(SearchResultKind.INVOCATION, '.named(1)', 6);
   }
 
-  Future<void> test_constructor_unnamed() async {
+  Future<void> test_class_constructor_unnamed() async {
     addTestFile('''
 /// [new A] 1
 /// [A.new] 2
@@ -123,7 +123,7 @@
     assertHasResult(SearchResultKind.REFERENCE, '.new; // 7', 4);
   }
 
-  Future<void> test_constructor_unnamed_potential() async {
+  Future<void> test_class_constructor_unnamed_potential() async {
     // Constructors in other classes shouldn't be considered potential matches,
     // even if they are also unnamed (since constructor call sites are
     // statically bound to their targets).
@@ -151,26 +151,7 @@
     assertHasResult(SearchResultKind.INVOCATION, '(1)', 0);
   }
 
-  Future<void> test_extension() async {
-    addTestFile('''
-extension E on int {
-  static void foo() {}
-  void bar() {}
-}
-
-void f() {
-  E.foo();
-  E(0).bar();
-}
-''');
-    await findElementReferences('E on int', false);
-    expect(searchElement!.kind, ElementKind.EXTENSION);
-    expect(results, hasLength(2));
-    assertHasResult(SearchResultKind.REFERENCE, 'E.foo();');
-    assertHasResult(SearchResultKind.REFERENCE, 'E(0)');
-  }
-
-  Future<void> test_field_explicit() async {
+  Future<void> test_class_field_explicit() async {
     addTestFile('''
 class A {
   var fff; // declaration
@@ -207,7 +188,7 @@
     assertHasResult(SearchResultKind.READ, 'fff(); // in f()');
   }
 
-  Future<void> test_field_implicit() async {
+  Future<void> test_class_field_implicit() async {
     addTestFile('''
 class A {
   var  get fff => null;
@@ -241,7 +222,7 @@
     }
   }
 
-  Future<void> test_field_inFormalParameter() async {
+  Future<void> test_class_field_inFormalParameter() async {
     addTestFile('''
 class A {
   var fff; // declaration
@@ -260,7 +241,205 @@
     assertHasResult(SearchResultKind.READ, 'fff); // in m()');
   }
 
-  Future<void> test_field_ofExtension_explicit_static() async {
+  Future<void> test_class_method() async {
+    addTestFile('''
+class A {
+  mmm(p) {}
+  m() {
+    mmm(1);
+    print(mmm); // in m()
+  }
+}
+void f(A a) {
+  a.mmm(10);
+  print(a.mmm); // in f()
+}
+''');
+    await findElementReferences('mmm(p) {}', false);
+    expect(searchElement!.kind, ElementKind.METHOD);
+    expect(results, hasLength(4));
+    assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);');
+    assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()');
+    assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
+    assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in f()');
+  }
+
+  Future<void> test_class_method_propagatedType() async {
+    addTestFile('''
+class A {
+  mmm(p) {}
+}
+void f() {
+  var a = new A();
+  a.mmm(10);
+  print(a.mmm);
+}
+''');
+    await findElementReferences('mmm(p) {}', false);
+    expect(searchElement!.kind, ElementKind.METHOD);
+    expect(results, hasLength(2));
+    assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
+    assertHasResult(SearchResultKind.REFERENCE, 'mmm);');
+  }
+
+  Future<void> test_enum_constructor_named() async {
+    addTestFile('''
+/// [new E.named] 1
+enum E {
+  v.named(); // 2
+  const E.named(); // 3
+  const E.other() : this.named(); // 4
+}
+''');
+    await findElementReferences('named(); // 3', false);
+    expect(searchElement!.kind, ElementKind.CONSTRUCTOR);
+    expect(results, hasLength(3));
+    assertHasResult(SearchResultKind.REFERENCE, '.named] 1', 6);
+    assertHasResult(SearchResultKind.INVOCATION, '.named(); // 2', 6);
+    assertHasResult(SearchResultKind.INVOCATION, '.named(); // 4', 6);
+  }
+
+  Future<void> test_enum_constructor_unnamed() async {
+    addTestFile('''
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+  const E(); // 5
+  const E.other() : this(); // 6
+}
+''');
+    await findElementReferences('E(); // 5', false);
+    expect(searchElement!.kind, ElementKind.CONSTRUCTOR);
+    expect(results, hasLength(5));
+    assertHasResult(SearchResultKind.REFERENCE, '] 1', 0);
+    assertHasResult(SearchResultKind.INVOCATION, ', // 2', 0);
+    assertHasResult(SearchResultKind.INVOCATION, '(), // 3', 0);
+    assertHasResult(SearchResultKind.INVOCATION, '.new(); // 4', 4);
+    assertHasResult(SearchResultKind.INVOCATION, '(); // 6', 0);
+  }
+
+  Future<void> test_enum_field_explicit() async {
+    addTestFile('''
+enum E {
+  v;
+  var fff; // 01
+  E(this.fff); // 02
+  E.named() : fff = 0; // 03
+  void foo() {
+    fff = 0; // 04 
+    fff += 0; // 05
+    fff; // 06
+    fff(); // 07
+  }
+}
+
+void f(E e) {
+  e.fff = 0; // 08
+  e.fff += 0; // 09
+  e.fff; // 10
+  e.fff(); // 11
+}
+''');
+    await findElementReferences('fff; // 01', false);
+    expect(searchElement!.kind, ElementKind.FIELD);
+    expect(results, hasLength(10));
+    assertHasResult(SearchResultKind.WRITE, 'fff); // 02');
+    assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 03');
+    // foo()
+    assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 04');
+    assertHasResult(SearchResultKind.WRITE, 'fff += 0; // 05');
+    assertHasResult(SearchResultKind.READ, 'fff; // 06');
+    assertHasResult(SearchResultKind.READ, 'fff(); // 07');
+    // f()
+    assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 08');
+    assertHasResult(SearchResultKind.WRITE, 'fff += 0; // 09');
+    assertHasResult(SearchResultKind.READ, 'fff; // 10');
+    assertHasResult(SearchResultKind.READ, 'fff(); // 11');
+  }
+
+  Future<void> test_enum_field_implicit() async {
+    addTestFile('''
+enum E {
+  v;
+  int get fff => 0;
+  void set fff(_) {}
+  void foo() {
+    fff; // 1
+    fff = 0; // 2
+  }
+}
+
+void f(E e) {
+  e.fff; // 3
+  e.fff = 0; // 4
+}
+''');
+    {
+      await findElementReferences('fff =>', false);
+      expect(searchElement!.kind, ElementKind.FIELD);
+      expect(results, hasLength(4));
+      assertHasResult(SearchResultKind.READ, 'fff; // 1');
+      assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 2');
+      assertHasResult(SearchResultKind.READ, 'fff; // 3');
+      assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 4');
+    }
+    {
+      await findElementReferences('fff(_) {}', false);
+      expect(results, hasLength(4));
+      assertHasResult(SearchResultKind.READ, 'fff; // 1');
+      assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 2');
+      assertHasResult(SearchResultKind.READ, 'fff; // 3');
+      assertHasResult(SearchResultKind.WRITE, 'fff = 0; // 4');
+    }
+  }
+
+  Future<void> test_enum_method() async {
+    addTestFile('''
+enum E {
+  v;
+  void foo() {}
+  void bar() {
+    foo(); // 1
+    this.foo(); // 2
+  }
+}
+
+void f(E e) {
+  e.foo(); // 3
+  e.foo; // 4
+}
+''');
+    await findElementReferences('foo() {}', false);
+    expect(searchElement!.kind, ElementKind.METHOD);
+    expect(results, hasLength(4));
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 2');
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
+    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
+  }
+
+  Future<void> test_extension() async {
+    addTestFile('''
+extension E on int {
+  static void foo() {}
+  void bar() {}
+}
+
+void f() {
+  E.foo();
+  E(0).bar();
+}
+''');
+    await findElementReferences('E on int', false);
+    expect(searchElement!.kind, ElementKind.EXTENSION);
+    expect(results, hasLength(2));
+    assertHasResult(SearchResultKind.REFERENCE, 'E.foo();');
+    assertHasResult(SearchResultKind.REFERENCE, 'E(0)');
+  }
+
+  Future<void> test_extension_field_explicit_static() async {
     addTestFile('''
 extension E on int {
   static var fff; // declaration
@@ -295,7 +474,7 @@
     assertHasResult(SearchResultKind.READ, 'fff(); // in f()');
   }
 
-  Future<void> test_field_ofExtension_implicit_instance() async {
+  Future<void> test_extension_field_implicit_instance() async {
     addTestFile('''
 extension E on int {
   var get fff => null;
@@ -329,7 +508,7 @@
     }
   }
 
-  Future<void> test_field_ofExtension_implicit_static() async {
+  Future<void> test_extension_field_implicit_static() async {
     addTestFile('''
 extension E on int {
   static var get fff => null;
@@ -363,6 +542,28 @@
     }
   }
 
+  Future<void> test_extension_method() async {
+    addTestFile('''
+extension E on int {
+  void foo() {}
+}
+
+void f() {
+  E(0).foo(); // 1
+  E(0).foo; // 2
+  0.foo(); // 3
+  0.foo; // 4
+}
+''');
+    await findElementReferences('foo() {}', false);
+    expect(searchElement!.kind, ElementKind.METHOD);
+    expect(results, hasLength(4));
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
+    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 2');
+    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
+    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
+  }
+
   Future<void> test_function() async {
     addTestFile('''
 fff(p) {}
@@ -511,69 +712,6 @@
     assertHasResult(SearchResultKind.READ, 'vvv();');
   }
 
-  Future<void> test_method() async {
-    addTestFile('''
-class A {
-  mmm(p) {}
-  m() {
-    mmm(1);
-    print(mmm); // in m()
-  }
-}
-void f(A a) {
-  a.mmm(10);
-  print(a.mmm); // in f()
-}
-''');
-    await findElementReferences('mmm(p) {}', false);
-    expect(searchElement!.kind, ElementKind.METHOD);
-    expect(results, hasLength(4));
-    assertHasResult(SearchResultKind.INVOCATION, 'mmm(1);');
-    assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in m()');
-    assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
-    assertHasResult(SearchResultKind.REFERENCE, 'mmm); // in f()');
-  }
-
-  Future<void> test_method_ofExtension() async {
-    addTestFile('''
-extension E on int {
-  void foo() {}
-}
-
-void f() {
-  E(0).foo(); // 1
-  E(0).foo; // 2
-  0.foo(); // 3
-  0.foo; // 4
-}
-''');
-    await findElementReferences('foo() {}', false);
-    expect(searchElement!.kind, ElementKind.METHOD);
-    expect(results, hasLength(4));
-    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 1');
-    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 2');
-    assertHasResult(SearchResultKind.INVOCATION, 'foo(); // 3');
-    assertHasResult(SearchResultKind.REFERENCE, 'foo; // 4');
-  }
-
-  Future<void> test_method_propagatedType() async {
-    addTestFile('''
-class A {
-  mmm(p) {}
-}
-void f() {
-  var a = new A();
-  a.mmm(10);
-  print(a.mmm);
-}
-''');
-    await findElementReferences('mmm(p) {}', false);
-    expect(searchElement!.kind, ElementKind.METHOD);
-    expect(results, hasLength(2));
-    assertHasResult(SearchResultKind.INVOCATION, 'mmm(10);');
-    assertHasResult(SearchResultKind.REFERENCE, 'mmm);');
-  }
-
   Future<void> test_mixin() async {
     addTestFile('''
 mixin A {}
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 43637ae..a5479ae 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -344,6 +344,68 @@
     assertHasOne(a, 'a');
   }
 
+  Future<void> test_searchReferences_enum_constructor_named() async {
+    var code = '''
+enum E {
+  v.named(); // 1
+  const E.named();
+}
+''';
+    await resolveTestCode(code);
+
+    var element = findElement.constructor('named');
+    var matches = await searchEngine.searchReferences(element);
+    expect(
+      matches,
+      unorderedEquals([
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.INVOCATION &&
+              identical(m.element, findElement.field('v')) &&
+              m.sourceRange.offset == code.indexOf('.named(); // 1') &&
+              m.sourceRange.length == '.named'.length;
+        }),
+      ]),
+    );
+  }
+
+  Future<void> test_searchReferences_enum_constructor_unnamed() async {
+    var code = '''
+enum E {
+  v1, // 1
+  v2(), // 2
+  v3.new(), // 3
+}
+''';
+    await resolveTestCode(code);
+
+    var element = findElement.unnamedConstructor('E');
+    var matches = await searchEngine.searchReferences(element);
+    expect(
+      matches,
+      unorderedEquals([
+        predicate((SearchMatch m) {
+          return m.kind ==
+                  MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS &&
+              identical(m.element, findElement.field('v1')) &&
+              m.sourceRange.offset == code.indexOf(', // 1') &&
+              m.sourceRange.length == 0;
+        }),
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.INVOCATION &&
+              identical(m.element, findElement.field('v2')) &&
+              m.sourceRange.offset == code.indexOf('(), // 2') &&
+              m.sourceRange.length == 0;
+        }),
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.INVOCATION &&
+              identical(m.element, findElement.field('v3')) &&
+              m.sourceRange.offset == code.indexOf('.new(), // 3') &&
+              m.sourceRange.length == '.new'.length;
+        }),
+      ]),
+    );
+  }
+
   Future<void>
       test_searchReferences_parameter_ofConstructor_super_named() async {
     var code = '''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
index 5a4616c..dae57ea 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_positional_test.dart
@@ -19,6 +19,110 @@
   @override
   FixKind get kind => DartFixKind.ADD_MISSING_PARAMETER_POSITIONAL;
 
+  Future<void> test_constructor_callingViaSuper() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B() : super(1, 2.0);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, [double d]);
+}
+class B extends A {
+  B() : super(1, 2.0);
+}
+''');
+  }
+
+  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/48359')
+  Future<void> test_constructor_callingViaSuperParameter() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a, super.b);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, [double b]);
+}
+class B extends A {
+  B(super.a, super.b);
+}
+''');
+  }
+
+  Future<void> test_constructor_hasOne() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+void f() {
+  A(1, 2.0);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a, [double d]);
+}
+void f() {
+  A(1, 2.0);
+}
+''');
+  }
+
+  Future<void> test_constructor_hasOneFieldFormalParameter() async {
+    await resolveTestCode('''
+class A {
+  int a;
+  A(this.a);
+}
+void f() {
+  A(1, 2.0);
+}
+''');
+    await assertHasFix('''
+class A {
+  int a;
+  A(this.a, [double d]);
+}
+void f() {
+  A(1, 2.0);
+}
+''');
+  }
+
+  Future<void> test_constructor_hasOneSuperParameter() async {
+    await resolveTestCode('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a);
+}
+void f() {
+  B(1, 2.0);
+}
+''');
+    await assertHasFix('''
+class A {
+  A(int a);
+}
+class B extends A {
+  B(super.a, [double d]);
+}
+void f() {
+  B(1, 2.0);
+}
+''');
+  }
+
   Future<void> test_function_hasNamed() async {
     await resolveTestCode('''
 test({int a = 0}) {}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
index 611de4e..86bdc42 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_variable_nullable_test.dart
@@ -26,10 +26,6 @@
   C({String this.s});
 }
 ''');
-    // TODO(srawlins): Remove the type if the quick fix as is would use the same
-    //  type as the field's type. (brianwilkerson) I would argue that removing
-    //  the type should be a separate fix/assist. There was a reason why the
-    //  user used an explicit type, and we shouldn't remove it when it's valid.
     await assertHasFix('''
 class C {
   String? s;
@@ -208,4 +204,42 @@
 void f<T>({T? s}) {}
 ''');
   }
+
+  Future<void> test_superParameter() async {
+    await resolveTestCode('''
+class C {
+  C({String? s});
+}
+class D extends C {
+  D({String super.s});
+}
+''');
+    await assertHasFix('''
+class C {
+  C({String? s});
+}
+class D extends C {
+  D({String? super.s});
+}
+''');
+  }
+
+  Future<void> test_superParameter_functionTyped() async {
+    await resolveTestCode('''
+class C {
+  C({void s()?});
+}
+class D extends C {
+  D({void super.s()});
+}
+''');
+    await assertHasFix('''
+class C {
+  C({void s()?});
+}
+class D extends C {
+  D({void super.s()?});
+}
+''');
+  }
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index cdd7c72..3dbb4a0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -534,6 +534,8 @@
     List<SearchResult> results = <SearchResult>[];
     await _addResults(results, element, searchedFiles, const {
       IndexRelationKind.IS_INVOKED_BY: SearchResultKind.INVOCATION,
+      IndexRelationKind.IS_INVOKED_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS:
+          SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
       IndexRelationKind.IS_REFERENCED_BY: SearchResultKind.REFERENCE,
       IndexRelationKind.IS_REFERENCED_BY_CONSTRUCTOR_TEAR_OFF:
           SearchResultKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF,
@@ -787,6 +789,7 @@
   READ_WRITE,
   WRITE,
   INVOCATION,
+  INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
   REFERENCE,
   REFERENCE_BY_CONSTRUCTOR_TEAR_OFF,
 }
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index a6b2bef..29b2ae2 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -103,7 +103,11 @@
     if (constKeyword != null) {
       _validateConstructorInitializers(node);
       if (node.factoryKeyword == null) {
-        _validateFieldInitializers(node.parent.classMembers, constKeyword);
+        _validateFieldInitializers(
+          node.parent.classMembers,
+          constKeyword,
+          isEnumDeclaration: node.parent is EnumDeclaration,
+        );
       }
     }
     _validateDefaultValues(node.parameters);
@@ -558,11 +562,17 @@
   /// required if the class has a constant constructor, the error is reported at
   /// [constKeyword], the const keyword on such a constant constructor.
   void _validateFieldInitializers(
-      List<ClassMember> members, Token constKeyword) {
+    List<ClassMember> members,
+    Token constKeyword, {
+    required bool isEnumDeclaration,
+  }) {
     for (ClassMember member in members) {
       if (member is FieldDeclaration && !member.isStatic) {
         for (VariableDeclaration variableDeclaration
             in member.fields.variables) {
+          if (isEnumDeclaration && variableDeclaration.name.name == 'values') {
+            continue;
+          }
           var initializer = variableDeclaration.initializer;
           if (initializer != null) {
             // Ignore any errors produced during validation--if the constant
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 229d450..681ae44 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -394,6 +394,9 @@
     super.visitChildren(visitor);
     safelyVisitChildren(accessors, visitor);
     safelyVisitChildren(fields, visitor);
+    safelyVisitChildren(constructors, visitor);
+    safelyVisitChildren(methods, visitor);
+    safelyVisitChildren(typeParameters, visitor);
   }
 
   /// Return an iterable containing all of the implementations of a getter with
@@ -820,14 +823,6 @@
     this.linkedData = linkedData;
   }
 
-  @override
-  void visitChildren(ElementVisitor visitor) {
-    super.visitChildren(visitor);
-    safelyVisitChildren(constructors, visitor);
-    safelyVisitChildren(methods, visitor);
-    safelyVisitChildren(typeParameters, visitor);
-  }
-
   /// Compute a list of constructors for this class, which is a mixin
   /// application.  If specified, [visitedClasses] is a list of the other mixin
   /// application classes which have been visited on the way to reaching this
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
index 76860af..e0e84d6 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -2,7 +2,6 @@
 // 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.
 
-import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
@@ -32,42 +31,14 @@
 
   bool get _isNonNullableByDefault => _typeSystem.isNonNullableByDefault;
 
-  void checkExtension(ExtensionDeclaration node) {
-    for (var getterNode in node.members) {
-      if (getterNode is MethodDeclaration && getterNode.isGetter) {
-        checkGetter(getterNode.name,
-            getterNode.declaredElement as PropertyAccessorElement);
+  void checkExtension(ExtensionElement element) {
+    for (var getter in element.accessors) {
+      if (getter.isGetter) {
+        _checkLocalGetter(getter);
       }
     }
   }
 
-  void checkGetter(
-    SimpleIdentifier nameNode,
-    PropertyAccessorElement getter,
-  ) {
-    assert(getter.isGetter);
-
-    var setter = getter.correspondingSetter;
-    if (setter == null) {
-      return;
-    }
-
-    var getterType = _getGetterType(getter);
-    var setterType = _getSetterType(setter);
-    if (setterType == null) {
-      return;
-    }
-
-    if (!_match(getterType, setterType)) {
-      var name = nameNode.name;
-      _errorReporter.reportErrorForNode(
-        _errorCode,
-        nameNode,
-        [name, getterType, setterType, name],
-      );
-    }
-  }
-
   void checkInterface(ClassElement classElement, Interface interface) {
     var libraryUri = classElement.library.source.uri;
 
@@ -113,6 +84,36 @@
     }
   }
 
+  void checkStaticAccessors(List<PropertyAccessorElement> accessors) {
+    for (var getter in accessors) {
+      // TODO(scheglov) Update `isStatic` instead
+      if ((getter.isStatic ||
+              getter.enclosingElement is CompilationUnitElement) &&
+          getter.isGetter) {
+        _checkLocalGetter(getter);
+      }
+    }
+  }
+
+  void _checkLocalGetter(PropertyAccessorElement getter) {
+    assert(getter.isGetter);
+    var setter = getter.correspondingSetter;
+    if (setter != null) {
+      var getterType = _getGetterType(getter);
+      var setterType = _getSetterType(setter);
+      if (setterType != null) {
+        if (!_match(getterType, setterType)) {
+          var name = getter.name;
+          _errorReporter.reportErrorForElement(
+            _errorCode,
+            getter,
+            [name, getterType, setterType, name],
+          );
+        }
+      }
+    }
+  }
+
   bool _match(DartType getterType, DartType setterType) {
     return _isNonNullableByDefault
         ? _typeSystem.isSubtypeOf(getterType, setterType)
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 4b746e6..2eafede 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -423,8 +423,9 @@
   void visitClassDeclaration(ClassDeclaration node) {
     var outerClass = _enclosingClass;
     try {
+      var element = node.declaredElement as ClassElementImpl;
       _isInNativeClass = node.nativeClause != null;
-      _enclosingClass = node.declaredElement as ClassElementImpl;
+      _enclosingClass = element;
 
       List<ClassMember> members = node.members;
       _duplicateDefinitionVerifier.checkClass(node);
@@ -448,6 +449,12 @@
       _checkForBadFunctionUse(node);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
       _checkForMainFunction(node.name);
+
+      GetterSetterTypesVerifier(
+        typeSystem: typeSystem,
+        errorReporter: errorReporter,
+      ).checkStaticAccessors(element.accessors);
+
       super.visitClassDeclaration(node);
     } finally {
       _isInNativeClass = false;
@@ -485,10 +492,17 @@
 
   @override
   void visitCompilationUnit(CompilationUnit node) {
+    var element = node.declaredElement as CompilationUnitElement;
     _featureSet = node.featureSet;
     _duplicateDefinitionVerifier.checkUnit(node);
     _checkForDeferredPrefixCollisions(node);
     _checkForIllegalLanguageOverride(node);
+
+    GetterSetterTypesVerifier(
+      typeSystem: typeSystem,
+      errorReporter: errorReporter,
+    ).checkStaticAccessors(element.accessors);
+
     super.visitCompilationUnit(node);
     _featureSet = null;
   }
@@ -589,6 +603,11 @@
       _checkForMainFunction(node.name);
       _checkForEnumInstantiatedToBoundsIsNotWellBounded(node, element);
 
+      GetterSetterTypesVerifier(
+        typeSystem: typeSystem,
+        errorReporter: errorReporter,
+      ).checkStaticAccessors(element.accessors);
+
       super.visitEnumDeclaration(node);
     } finally {
       _enclosingClass = outerClass;
@@ -620,7 +639,8 @@
 
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
-    _enclosingExtension = node.declaredElement;
+    var element = node.declaredElement!;
+    _enclosingExtension = element;
     _duplicateDefinitionVerifier.checkExtension(node);
     _checkForConflictingExtensionTypeVariableErrorCodes();
     _checkForFinalNotInitializedInClass(node.members);
@@ -628,7 +648,7 @@
     GetterSetterTypesVerifier(
       typeSystem: typeSystem,
       errorReporter: errorReporter,
-    ).checkExtension(node);
+    ).checkExtension(element);
 
     final name = node.name;
     if (name != null) {
@@ -727,13 +747,6 @@
     _withEnclosingExecutable(functionElement, () {
       SimpleIdentifier identifier = node.name;
       TypeAnnotation? returnType = node.returnType;
-      if (node.isGetter) {
-        GetterSetterTypesVerifier(
-          typeSystem: typeSystem,
-          errorReporter: errorReporter,
-        ).checkGetter(
-            node.name, node.declaredElement as PropertyAccessorElement);
-      }
       if (node.isSetter) {
         FunctionExpression functionExpression = node.functionExpression;
         _checkForWrongNumberOfParametersForSetter(
@@ -918,13 +931,6 @@
   void visitMethodDeclaration(MethodDeclaration node) {
     _withEnclosingExecutable(node.declaredElement!, () {
       var returnType = node.returnType;
-      if (node.isStatic && node.isGetter) {
-        GetterSetterTypesVerifier(
-          typeSystem: typeSystem,
-          errorReporter: errorReporter,
-        ).checkGetter(
-            node.name, node.declaredElement as PropertyAccessorElement);
-      }
       if (node.isSetter) {
         _checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
         _checkForNonVoidReturnTypeForSetter(returnType);
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index da1b04c..793d021 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -3131,6 +3131,13 @@
       ClassElement element = node.declaredElement!;
       node.metadata.accept(this);
 
+      nameScope = TypeParameterScope(
+        nameScope,
+        element.typeParameters,
+      );
+      _setNodeNameScope(node, nameScope);
+      visitEnumDeclarationInScope(node);
+
       nameScope = ClassScope(nameScope, element);
       visitEnumMembersInScope(node);
     } finally {
@@ -3138,6 +3145,13 @@
     }
   }
 
+  void visitEnumDeclarationInScope(EnumDeclaration node) {
+    node.name.accept(this);
+    node.typeParameters?.accept(this);
+    node.withClause?.accept(this);
+    node.implementsClause?.accept(this);
+  }
+
   void visitEnumMembersInScope(EnumDeclaration node) {
     node.documentationComment?.accept(this);
     node.constants.accept(this);
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 8e54e31..4e4f016 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -596,7 +596,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_named() async {
+  test_searchReferences_ConstructorElement_class_named() async {
     await resolveTestCode('''
 /// [new A.named] 1
 class A {
@@ -638,7 +638,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_named_viaTypeAlias() async {
+  test_searchReferences_ConstructorElement_class_named_viaTypeAlias() async {
     await resolveTestCode('''
 class A<T> {
   A.named();
@@ -663,7 +663,7 @@
     ]);
   }
 
-  test_searchReferences_ConstructorElement_unnamed_declared() async {
+  test_searchReferences_ConstructorElement_class_unnamed_declared() async {
     await resolveTestCode('''
 /// [new A] 1
 class A {
@@ -703,7 +703,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_unnamed_otherFile() async {
+  test_searchReferences_ConstructorElement_class_unnamed_otherFile() async {
     String other = convertPath('$testPackageLibPath/other.dart');
     String otherCode = '''
 import 'test.dart';
@@ -733,7 +733,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_ConstructorElement_unnamed_synthetic() async {
+  test_searchReferences_ConstructorElement_class_unnamed_synthetic() async {
     await resolveTestCode('''
 /// [new A] 1
 class A {}
@@ -767,6 +767,91 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_ConstructorElement_enum_named() async {
+    await resolveTestCode('''
+/// [new E.named] 1
+enum E {
+  v.named(); // 2
+  const E.named();
+  const E.other() : this.named(); // 3
+}
+''');
+    var element = findElement.constructor('named');
+    var expected = [
+      _expectIdQ(
+          findElement.enum_('E'), SearchResultKind.REFERENCE, '.named] 1',
+          length: '.named'.length),
+      _expectIdQ(findElement.field('v', of: 'E'), SearchResultKind.INVOCATION,
+          '.named(); // 2',
+          length: '.named'.length),
+      _expectIdQ(findElement.constructor('other', of: 'E'),
+          SearchResultKind.INVOCATION, '.named(); // 3',
+          length: '.named'.length),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ConstructorElement_enum_unnamed_declared() async {
+    await resolveTestCode('''
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+  const E();
+  const E.other() : this(); // 5
+}
+''');
+    var element = findElement.unnamedConstructor('E');
+    var expected = [
+      _expectIdQ(findElement.enum_('E'), SearchResultKind.REFERENCE, '] 1',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v1'),
+          SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+          ', // 2',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v2'), SearchResultKind.INVOCATION, '(), // 3',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v3'), SearchResultKind.INVOCATION, '.new(); // 4',
+          length: '.new'.length),
+      _expectIdQ(findElement.constructor('other'), SearchResultKind.INVOCATION,
+          '(); // 5',
+          length: 0),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
+  test_searchReferences_ConstructorElement_enum_unnamed_synthetic() async {
+    await resolveTestCode('''
+/// [new E] 1
+enum E {
+  v1, // 2
+  v2(), // 3
+  v3.new(); // 4
+}
+''');
+    var element = findElement.unnamedConstructor('E');
+    var expected = [
+      _expectIdQ(findElement.enum_('E'), SearchResultKind.REFERENCE, '] 1',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v1'),
+          SearchResultKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS,
+          ', // 2',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v2'), SearchResultKind.INVOCATION, '(), // 3',
+          length: 0),
+      _expectIdQ(
+          findElement.field('v3'), SearchResultKind.INVOCATION, '.new(); // 4',
+          length: '.new'.length),
+    ];
+    await _verifyReferences(element, expected);
+  }
+
   test_searchReferences_ExtensionElement() async {
     await resolveTestCode('''
 extension E on int {
@@ -788,7 +873,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_FieldElement() async {
+  test_searchReferences_FieldElement_class() async {
     await resolveTestCode('''
 class A {
   var field;
@@ -822,33 +907,7 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_FieldElement_ofEnum() async {
-    await resolveTestCode('''
-enum MyEnum {
-  A, B, C
-}
-main() {
-  print(MyEnum.A.index);
-  print(MyEnum.values);
-  print(MyEnum.A);
-  print(MyEnum.B);
-}
-''');
-    var enumElement = findElement.enum_('MyEnum');
-    var main = findElement.function('main');
-    await _verifyReferences(enumElement.getField('index')!,
-        [_expectIdQ(main, SearchResultKind.READ, 'index);')]);
-    await _verifyReferences(enumElement.getField('values')!,
-        [_expectIdQ(main, SearchResultKind.READ, 'values);')]);
-    await _verifyReferences(enumElement.getField('A')!, [
-      _expectIdQ(main, SearchResultKind.READ, 'A.index);'),
-      _expectIdQ(main, SearchResultKind.READ, 'A);')
-    ]);
-    await _verifyReferences(enumElement.getField('B')!,
-        [_expectIdQ(main, SearchResultKind.READ, 'B);')]);
-  }
-
-  test_searchReferences_FieldElement_synthetic() async {
+  test_searchReferences_FieldElement_class_synthetic() async {
     await resolveTestCode('''
 class A {
   get field => null;
@@ -878,6 +937,54 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_FieldElement_enum() async {
+    await resolveTestCode('''
+enum E {
+  v(field: 0);
+  final int field;
+  const E({required this.field}); // 1
+}
+
+void f(E e) {
+  e.field; // 2
+}
+''');
+    await _verifyReferences(findElement.field('field'), [
+      _expectIdQ(
+          findElement.field('v'), SearchResultKind.REFERENCE, 'field: 0'),
+      _expectIdQ(findElement.parameter('field'), SearchResultKind.WRITE,
+          'field}); // 1'),
+      _expectIdQ(
+          findElement.topFunction('f'), SearchResultKind.READ, 'field; // 2'),
+    ]);
+  }
+
+  test_searchReferences_FieldElement_enum_values() async {
+    await resolveTestCode('''
+enum MyEnum {
+  A, B, C
+}
+main() {
+  print(MyEnum.A.index);
+  print(MyEnum.values);
+  print(MyEnum.A);
+  print(MyEnum.B);
+}
+''');
+    var enumElement = findElement.enum_('MyEnum');
+    var main = findElement.function('main');
+    await _verifyReferences(enumElement.getField('index')!,
+        [_expectIdQ(main, SearchResultKind.READ, 'index);')]);
+    await _verifyReferences(enumElement.getField('values')!,
+        [_expectIdQ(main, SearchResultKind.READ, 'values);')]);
+    await _verifyReferences(enumElement.getField('A')!, [
+      _expectIdQ(main, SearchResultKind.READ, 'A.index);'),
+      _expectIdQ(main, SearchResultKind.READ, 'A);')
+    ]);
+    await _verifyReferences(enumElement.getField('B')!,
+        [_expectIdQ(main, SearchResultKind.READ, 'B);')]);
+  }
+
   test_searchReferences_FunctionElement() async {
     await resolveTestCode('''
 test() {}
@@ -1264,55 +1371,35 @@
     await _verifyReferences(method, expected);
   }
 
-  test_searchReferences_MethodElement_extension_named() async {
+  test_searchReferences_MethodElement_enum() async {
     await resolveTestCode('''
-extension E on int {
+enum E {
+  v;
   void foo() {}
-
   void bar() {
     foo(); // 1
     this.foo(); // 2
-    print(foo); // 3
-    print(this.foo); // 4
   }
 }
-''');
-    var foo = findElement.method('foo');
-    var bar = findElement.method('bar');
-    var expected = [
-      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
-      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
-      _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
-      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
-    ];
-    await _verifyReferences(foo, expected);
-  }
 
-  test_searchReferences_MethodElement_extension_unnamed() async {
-    await resolveTestCode('''
-extension on int {
-  void foo() {}
-
-  void bar() {
-    foo(); // 1
-    this.foo(); // 2
-    print(foo); // 3
-    print(this.foo); // 4
-  }
+void f(E e) {
+  e.foo(); // 3
+  e.foo; // 4
 }
 ''');
-    var foo = findElement.method('foo');
-    var bar = findElement.method('bar');
-    var expected = [
-      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
-      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
-      _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
-      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
-    ];
-    await _verifyReferences(foo, expected);
+    await _verifyReferences(findElement.method('foo'), [
+      _expectId(findElement.method('bar'), SearchResultKind.INVOCATION,
+          'foo(); // 1'),
+      _expectIdQ(findElement.method('bar'), SearchResultKind.INVOCATION,
+          'foo(); // 2'),
+      _expectIdQ(findElement.topFunction('f'), SearchResultKind.INVOCATION,
+          'foo(); // 3'),
+      _expectIdQ(findElement.topFunction('f'), SearchResultKind.REFERENCE,
+          'foo; // 4'),
+    ]);
   }
 
-  test_searchReferences_MethodElement_ofExtension_instance() async {
+  test_searchReferences_MethodElement_extension_instance() async {
     await resolveTestCode('''
 extension E on int {
   void foo() {}
@@ -1348,7 +1435,31 @@
     await _verifyReferences(element, expected);
   }
 
-  test_searchReferences_MethodElement_ofExtension_static() async {
+  test_searchReferences_MethodElement_extension_named() async {
+    await resolveTestCode('''
+extension E on int {
+  void foo() {}
+
+  void bar() {
+    foo(); // 1
+    this.foo(); // 2
+    print(foo); // 3
+    print(this.foo); // 4
+  }
+}
+''');
+    var foo = findElement.method('foo');
+    var bar = findElement.method('bar');
+    var expected = [
+      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
+      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
+      _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
+      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
+    ];
+    await _verifyReferences(foo, expected);
+  }
+
+  test_searchReferences_MethodElement_extension_static() async {
     await resolveTestCode('''
 extension E on int {
   static void foo() {}
@@ -1376,6 +1487,30 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_MethodElement_extension_unnamed() async {
+    await resolveTestCode('''
+extension on int {
+  void foo() {}
+
+  void bar() {
+    foo(); // 1
+    this.foo(); // 2
+    print(foo); // 3
+    print(this.foo); // 4
+  }
+}
+''');
+    var foo = findElement.method('foo');
+    var bar = findElement.method('bar');
+    var expected = [
+      _expectId(bar, SearchResultKind.INVOCATION, 'foo(); // 1'),
+      _expectIdQ(bar, SearchResultKind.INVOCATION, 'foo(); // 2'),
+      _expectId(bar, SearchResultKind.REFERENCE, 'foo); // 3'),
+      _expectIdQ(bar, SearchResultKind.REFERENCE, 'foo); // 4')
+    ];
+    await _verifyReferences(foo, expected);
+  }
+
   test_searchReferences_MethodMember_class() async {
     await resolveTestCode('''
 class A<T> {
@@ -2024,6 +2159,29 @@
     await _verifyReferences(element, expected);
   }
 
+  test_searchReferences_TypeParameterElement_ofEnum() async {
+    await resolveTestCode('''
+enum E<T> {
+  v;
+  final T a;
+  void foo(T b) {}
+}
+''');
+    var element = findElement.typeParameter('T');
+    await _verifyReferences(element, [
+      _expectId(
+        findElement.field('a'),
+        SearchResultKind.REFERENCE,
+        'T a',
+      ),
+      _expectId(
+        findElement.parameter('b'),
+        SearchResultKind.REFERENCE,
+        'T b',
+      ),
+    ]);
+  }
+
   test_searchReferences_TypeParameterElement_ofLocalFunction() async {
     await resolveTestCode('''
 main() {
diff --git a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
index d47a2dc..e37f2e8 100644
--- a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
@@ -17,6 +17,23 @@
 @reflectiveTest
 class SimpleIdentifierResolutionTest extends PubPackageResolutionTest
     with SimpleIdentifierResolutionTestCases {
+  test_enum_typeParameter_in_method() async {
+    await assertNoErrorsInCode('''
+enum E<T> {
+  v;
+  void foo() {
+    T;
+  }
+}
+''');
+
+    assertSimpleIdentifier(
+      findNode.simple('T;'),
+      element: findElement.typeParameter('T'),
+      type: 'Type',
+    );
+  }
+
   test_functionReference() async {
     await assertErrorsInCode('''
 // @dart = 2.7
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
index 61fb991..179896d 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_static_and_instance_test.dart
@@ -491,6 +491,17 @@
     ]);
   }
 
+  test_constant_this_setter() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  set foo(_) {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+    ]);
+  }
+
   test_constant_toString() async {
     await assertErrorsInCode(r'''
 enum E {
@@ -557,6 +568,17 @@
     ]);
   }
 
+  test_field_this_constant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  int get foo => 0;
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+    ]);
+  }
+
   test_field_this_getter() async {
     await assertErrorsInCode(r'''
 enum E {
@@ -661,6 +683,17 @@
     ]);
   }
 
+  test_method_this_constant() async {
+    await assertErrorsInCode(r'''
+enum E {
+  foo;
+  void foo() {}
+}
+''', [
+      error(CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, 11, 3),
+    ]);
+  }
+
   test_method_this_getter() async {
     await assertErrorsInCode(r'''
 enum E {
diff --git a/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart b/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
index 3b94c24..5ef6e88 100644
--- a/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_constructor_with_field_initialized_by_non_const_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class ConstConstructorWithFieldInitializedByNonConstTest
     extends PubPackageResolutionTest {
-  test_factoryConstructor() async {
+  test_class_factoryConstructor() async {
     await assertNoErrorsInCode(r'''
 class A {
   final List<int> list = f();
@@ -32,7 +32,7 @@
 ''');
   }
 
-  test_instanceField() async {
+  test_class_instanceField() async {
     await assertErrorsInCode(r'''
 class A {
   final int i = f();
@@ -50,7 +50,7 @@
     ]);
   }
 
-  test_staticField() async {
+  test_class_staticField() async {
     await assertNoErrorsInCode(r'''
 class A {
   static final int i = f();
@@ -61,4 +61,32 @@
 }
 ''');
   }
+
+  test_enum_instanceField() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final int i = f();
+  const E();
+}
+int f() => 0;
+''', [
+      error(
+          CompileTimeErrorCode
+              .CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST,
+          37,
+          5),
+    ]);
+  }
+
+  test_enum_staticField() async {
+    await assertNoErrorsInCode(r'''
+enum E {
+  v;
+  static final int i = f();
+  const E();
+}
+int f() => 0;
+''');
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
index 57a6e98..7fec331 100644
--- a/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/duplicate_definition_test.dart
@@ -538,7 +538,7 @@
     await assertNoErrorsInCode(r'''
 enum E {
   foo;
-  static set foo(int _) {}
+  static set foo(_) {}
 }
 ''');
   }
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
index ec81014..ac4c1f3 100644
--- a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
@@ -46,6 +46,17 @@
 ''');
   }
 
+  test_class_instance_field() async {
+    await assertErrorsInCode('''
+class C {
+  final num foo = 0;
+  set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 22, 3),
+    ]);
+  }
+
   test_class_instance_interfaces() async {
     await assertErrorsInCode(r'''
 class A {
@@ -213,6 +224,64 @@
     ]);
   }
 
+  test_class_static_field() async {
+    await assertErrorsInCode('''
+class C {
+  static final num foo = 0;
+  static set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 29, 3),
+    ]);
+  }
+
+  test_enum_instance() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  num get foo => 0;
+  set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 24, 3),
+    ]);
+  }
+
+  test_enum_instance_field() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  final num foo = 0;
+  set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 26, 3),
+    ]);
+  }
+
+  test_enum_static() async {
+    await assertErrorsInCode('''
+enum E {
+  v;
+  static num get foo => 0;
+  static set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 31, 3),
+    ]);
+  }
+
+  test_enum_static_field() async {
+    await assertErrorsInCode('''
+enum E {
+  foo;
+  static set foo(int v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 11, 3),
+    ]);
+  }
+
   test_extension_instance() async {
     await assertErrorsInCode('''
 extension E on Object {
@@ -235,6 +304,17 @@
     ]);
   }
 
+  test_extension_static_field() async {
+    await assertErrorsInCode('''
+extension E on Object {
+  static final int foo = 0;
+  static set foo(String v) {}
+}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 43, 3),
+    ]);
+  }
+
   test_topLevel() async {
     await assertErrorsInCode('''
 int get foo => 0;
@@ -266,4 +346,13 @@
 set foo(int v) {}
 ''');
   }
+
+  test_topLevel_variable() async {
+    await assertErrorsInCode('''
+final int foo = 0;
+set foo(String v) {}
+''', [
+      error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 10, 3),
+    ]);
+  }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
index e4f48df..b66fed4 100644
--- a/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/values_declaration_in_enum_test.dart
@@ -47,6 +47,18 @@
     ]);
   }
 
+  test_field_withConstructor() async {
+    await assertErrorsInCode(r'''
+enum E {
+  v;
+  final values = [];
+  const E();
+}
+''', [
+      error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 22, 6),
+    ]);
+  }
+
   test_getter() async {
     await assertErrorsInCode(r'''
 enum E {
@@ -95,7 +107,7 @@
     await assertErrorsInCode(r'''
 enum E {
   v;
-  set values(int _) {}
+  set values(_) {}
 }
 ''', [
       error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 20, 6),
@@ -106,7 +118,7 @@
     await assertErrorsInCode(r'''
 enum E {
   v;
-  static set values(int _) {}
+  static set values(_) {}
 }
 ''', [
       error(CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM, 27, 6),
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index 537f6c2..76f048a 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -389,6 +389,21 @@
   }
 
   @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    computer._addRegionForNode(node.name, node.constructorElement);
+
+    var arguments = node.arguments;
+    if (arguments != null) {
+      computer._addRegionForNode(
+        arguments.constructorSelector?.name,
+        node.constructorElement,
+      );
+      arguments.typeArguments?.accept(this);
+      arguments.argumentList.accept(this);
+    }
+  }
+
+  @override
   void visitExportDirective(ExportDirective node) {
     var exportElement = node.element;
     if (exportElement != null) {
diff --git a/pkg/compiler/README.md b/pkg/compiler/README.md
index deb6c60..b40befe 100644
--- a/pkg/compiler/README.md
+++ b/pkg/compiler/README.md
@@ -679,15 +679,6 @@
 `lib/src/scanner`
 `lib/src/scanner/scanner_task.dart`
 
-`lib/src/helpers`
-`lib/src/helpers/trace.dart`
-`lib/src/helpers/debug_collection.dart`
-`lib/src/helpers/expensive_map.dart`
-`lib/src/helpers/helpers.dart`
-`lib/src/helpers/track_map.dart`
-`lib/src/helpers/expensive_set.dart`
-`lib/src/helpers/stats.dart`
-
 `lib/src/js`
 `lib/src/js/js.dart`
 `lib/src/js/placeholder_safety.dart`
diff --git a/pkg/compiler/lib/src/common.dart b/pkg/compiler/lib/src/common.dart
index 0a4b1d5..cb18897 100644
--- a/pkg/compiler/lib/src/common.dart
+++ b/pkg/compiler/lib/src/common.dart
@@ -17,6 +17,5 @@
         NO_LOCATION_SPANNABLE,
         Spannable,
         SpannableAssertionFailure;
-export 'helpers/helpers.dart';
 
 bool retainDataForTesting = false;
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index f8d3873..9ea97ce 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -828,14 +828,6 @@
     reportDiagnosticInternal(message, infos, api.Diagnostic.INFO);
   }
 
-  @deprecated
-  @override
-  void reportInfoMessage(Spannable node, MessageKind messageKind,
-      [Map<String, String> arguments = const {}]) {
-    reportDiagnosticInternal(createMessage(node, messageKind, arguments),
-        const <DiagnosticMessage>[], api.Diagnostic.INFO);
-  }
-
   void reportDiagnosticInternal(DiagnosticMessage message,
       List<DiagnosticMessage> infos, api.Diagnostic kind) {
     if (!options.showAllPackageWarnings &&
diff --git a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
index b009473..c425106 100644
--- a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
+++ b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
@@ -49,13 +49,14 @@
   void reportHint(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
 
+  void reportInfoMessage(Spannable node, MessageKind errorCode,
+      [Map<String, String> arguments = const {}]) {
+    reportInfo(createMessage(node, errorCode, arguments));
+  }
+
   void reportInfo(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
 
-  @deprecated
-  void reportInfoMessage(Spannable node, MessageKind errorCode,
-      [Map<String, String> arguments = const {}]);
-
   /// Set current element of this reporter to [element]. This is used for
   /// creating [SourceSpan] in [spanFromSpannable].
   withCurrentElement(Entity element, f());
diff --git a/pkg/compiler/lib/src/helpers/debug_collection.dart b/pkg/compiler/lib/src/helpers/debug_collection.dart
deleted file mode 100644
index de9a857e..0000000
--- a/pkg/compiler/lib/src/helpers/debug_collection.dart
+++ /dev/null
@@ -1,494 +0,0 @@
-// Copyright (c) 2014, 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.
-
-typedef DebugCallback = void Function(
-    String methodName, dynamic arg1, dynamic arg2);
-
-class DebugMap<K, V> implements Map<K, V> {
-  final Map<K, V> sourceMap;
-  DebugCallback indexSetCallback;
-  DebugCallback putIfAbsentCallback;
-  DebugCallback removeCallback;
-
-  DebugMap(this.sourceMap, {DebugCallback addCallback, this.removeCallback}) {
-    if (addCallback != null) {
-      this.addCallback = addCallback;
-    }
-  }
-
-  void set addCallback(DebugCallback value) {
-    indexSetCallback = value;
-    putIfAbsentCallback = value;
-  }
-
-  @override
-  Map<RK, RV> cast<RK, RV>() => Map.castFrom<K, V, RK, RV>(this);
-  @override
-  bool containsValue(Object value) {
-    return sourceMap.containsValue(value);
-  }
-
-  @override
-  bool containsKey(Object key) => sourceMap.containsKey(key);
-
-  @override
-  V operator [](Object key) => sourceMap[key];
-
-  @override
-  void operator []=(K key, V value) {
-    if (indexSetCallback != null) {
-      indexSetCallback('[]=', key, value);
-    }
-    sourceMap[key] = value;
-  }
-
-  @override
-  V putIfAbsent(K key, V ifAbsent()) {
-    return sourceMap.putIfAbsent(key, () {
-      V v = ifAbsent();
-      if (putIfAbsentCallback != null) {
-        putIfAbsentCallback('putIfAbsent', key, v);
-      }
-      return v;
-    });
-  }
-
-  @override
-  void addAll(Map<K, V> other) => sourceMap.addAll(other);
-
-  @override
-  V remove(Object key) {
-    if (removeCallback != null) {
-      removeCallback('remove', key, sourceMap[key]);
-    }
-    return sourceMap.remove(key);
-  }
-
-  @override
-  void clear() {
-    if (removeCallback != null) {
-      removeCallback('clear', sourceMap, null);
-    }
-    sourceMap.clear();
-  }
-
-  @override
-  void forEach(void f(K key, V value)) => sourceMap.forEach(f);
-
-  @override
-  Iterable<K> get keys => sourceMap.keys;
-
-  @override
-  Iterable<V> get values => sourceMap.values;
-
-  @override
-  Iterable<MapEntry<K, V>> get entries => sourceMap.entries;
-
-  @override
-  void addEntries(Iterable<MapEntry<K, V>> entries) {
-    sourceMap.addEntries(entries);
-  }
-
-  @override
-  Map<K2, V2> map<K2, V2>(MapEntry<K2, V2> transform(K key, V value)) =>
-      sourceMap.map(transform);
-
-  @override
-  int get length => sourceMap.length;
-
-  @override
-  bool get isEmpty => sourceMap.isEmpty;
-
-  @override
-  bool get isNotEmpty => sourceMap.isNotEmpty;
-
-  @override
-  V update(K key, V update(V value), {V ifAbsent()}) =>
-      sourceMap.update(key, update, ifAbsent: ifAbsent);
-
-  @override
-  void updateAll(V update(K key, V value)) {
-    sourceMap.updateAll(update);
-  }
-
-  @override
-  void removeWhere(bool test(K key, V value)) {
-    sourceMap.removeWhere(test);
-  }
-}
-
-class DebugIterable<E> implements Iterable<E> {
-  final Iterable<E> iterable;
-
-  DebugIterable(this.iterable);
-
-  @override
-  Iterator<E> get iterator => iterable.iterator;
-
-  @override
-  Iterable<R> cast<R>() => Iterable.castFrom<E, R>(this);
-  @override
-  Iterable<T> map<T>(T f(E element)) => iterable.map(f);
-
-  @override
-  Iterable<E> where(bool test(E element)) => iterable.where(test);
-
-  @override
-  Iterable<T> expand<T>(Iterable<T> f(E element)) => iterable.expand(f);
-
-  @override
-  bool contains(Object element) => iterable.contains(element);
-
-  @override
-  void forEach(void f(E element)) => iterable.forEach(f);
-
-  @override
-  E reduce(E combine(E value, E element)) => iterable.reduce(combine);
-
-  @override
-  T fold<T>(T initialValue, T combine(T previousValue, E element)) {
-    return iterable.fold(initialValue, combine);
-  }
-
-  @override
-  bool every(bool test(E element)) => iterable.every(test);
-
-  @override
-  String join([String separator = ""]) => iterable.join(separator);
-
-  @override
-  bool any(bool test(E element)) => iterable.any(test);
-
-  @override
-  List<E> toList({bool growable = true}) {
-    return iterable.toList(growable: growable);
-  }
-
-  @override
-  Set<E> toSet() => iterable.toSet();
-
-  @override
-  int get length => iterable.length;
-
-  @override
-  bool get isEmpty => iterable.isEmpty;
-
-  @override
-  bool get isNotEmpty => iterable.isNotEmpty;
-
-  @override
-  Iterable<E> take(int n) => iterable.take(n);
-
-  @override
-  Iterable<E> takeWhile(bool test(E value)) => iterable.takeWhile(test);
-
-  @override
-  Iterable<E> skip(int n) => iterable.skip(n);
-
-  @override
-  Iterable<E> skipWhile(bool test(E value)) => iterable.skipWhile(test);
-
-  @override
-  E get first => iterable.first;
-
-  @override
-  E get last => iterable.last;
-
-  @override
-  E get single => iterable.single;
-
-  @override
-  E firstWhere(bool test(E element), {E orElse()}) {
-    return iterable.firstWhere(test, orElse: orElse);
-  }
-
-  @override
-  E lastWhere(bool test(E element), {E orElse()}) {
-    return iterable.lastWhere(test, orElse: orElse);
-  }
-
-  @override
-  E singleWhere(bool test(E element), {E orElse()}) =>
-      iterable.singleWhere(test, orElse: orElse);
-
-  @override
-  E elementAt(int index) => iterable.elementAt(index);
-
-  @override
-  Iterable<E> followedBy(Iterable<E> other) => iterable.followedBy(other);
-
-  @override
-  Iterable<T> whereType<T>() => iterable.whereType<T>();
-
-  @override
-  String toString() => iterable.toString();
-}
-
-class DebugList<E> extends DebugIterable<E> implements List<E> {
-  DebugCallback addCallback;
-  DebugCallback addAllCallback;
-
-  DebugList(List<E> list, {this.addCallback, this.addAllCallback})
-      : super(list);
-
-  List<E> get list => iterable;
-
-  @override
-  List<R> cast<R>() => List.castFrom<E, R>(this);
-  @override
-  List<E> operator +(List<E> other) => list + other;
-
-  @override
-  E operator [](int index) => list[index];
-
-  @override
-  void operator []=(int index, E value) {
-    list[index] = value;
-  }
-
-  @override
-  void set first(E element) {
-    list.first = element;
-  }
-
-  @override
-  void set last(E element) {
-    list.last = element;
-  }
-
-  @override
-  int get length => list.length;
-
-  @override
-  void set length(int newLength) {
-    list.length = newLength;
-  }
-
-  @override
-  void add(E value) {
-    if (addCallback != null) {
-      addCallback('add', value, null);
-    }
-    list.add(value);
-  }
-
-  @override
-  void addAll(Iterable<E> iterable) {
-    if (addAllCallback != null) {
-      addAllCallback('addAll', iterable, null);
-    }
-    list.addAll(iterable);
-  }
-
-  @override
-  Iterable<E> get reversed => list.reversed;
-
-  @override
-  void sort([int compare(E a, E b)]) => list.sort(compare);
-
-  @override
-  void shuffle([random]) => list.shuffle(random);
-
-  @override
-  int indexOf(E element, [int start = 0]) => list.indexOf(element, start);
-
-  @override
-  int indexWhere(bool test(E element), [int start = 0]) =>
-      list.indexWhere(test, start);
-
-  @override
-  int lastIndexOf(E element, [int start]) => list.lastIndexOf(element, start);
-
-  @override
-  int lastIndexWhere(bool test(E element), [int start]) =>
-      list.lastIndexWhere(test, start);
-
-  @override
-  void clear() => list.clear();
-
-  @override
-  void insert(int index, E element) => list.insert(index, element);
-
-  @override
-  void insertAll(int index, Iterable<E> iterable) {
-    list.insertAll(index, iterable);
-  }
-
-  @override
-  void setAll(int index, Iterable<E> iterable) => list.setAll(index, iterable);
-
-  @override
-  bool remove(Object value) => list.remove(value);
-
-  @override
-  E removeAt(int index) => list.removeAt(index);
-
-  @override
-  E removeLast() => list.removeLast();
-
-  @override
-  void removeWhere(bool test(E element)) => list.removeWhere(test);
-
-  @override
-  void retainWhere(bool test(E element)) => list.retainWhere(test);
-
-  @override
-  List<E> sublist(int start, [int end]) => list.sublist(start, end);
-
-  @override
-  Iterable<E> getRange(int start, int end) => list.getRange(start, end);
-
-  @override
-  void setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) {
-    list.setRange(start, end, iterable, skipCount);
-  }
-
-  @override
-  void removeRange(int start, int end) {
-    list.removeRange(start, end);
-  }
-
-  @override
-  void fillRange(int start, int end, [E fillValue]) {
-    list.fillRange(start, end, fillValue);
-  }
-
-  @override
-  void replaceRange(int start, int end, Iterable<E> replacement) {
-    list.replaceRange(start, end, replacement);
-  }
-
-  @override
-  Map<int, E> asMap() => list.asMap();
-}
-
-class DebugSet<E> extends DebugIterable<E> implements Set<E> {
-  DebugCallback addCallback;
-
-  DebugSet(Set<E> set, {this.addCallback}) : super(set);
-
-  Set<E> get set => iterable;
-
-  @override
-  Set<R> cast<R>() => Set.castFrom<E, R>(this);
-  @override
-  bool contains(Object value) => set.contains(value);
-
-  @override
-  bool add(E value) {
-    if (addCallback != null) {
-      addCallback('add', value, null);
-    }
-    return set.add(value);
-  }
-
-  @override
-  void addAll(Iterable<E> elements) {
-    elements.forEach(add);
-  }
-
-  @override
-  bool remove(Object value) => set.remove(value);
-
-  @override
-  E lookup(Object object) => set.lookup(object);
-
-  @override
-  void removeAll(Iterable<Object> elements) => set.removeAll(elements);
-
-  @override
-  void retainAll(Iterable<Object> elements) => set.retainAll(elements);
-
-  @override
-  void removeWhere(bool test(E element)) => set.removeWhere(test);
-
-  @override
-  void retainWhere(bool test(E element)) => set.retainWhere(test);
-
-  @override
-  bool containsAll(Iterable<Object> other) => set.containsAll(other);
-
-  @override
-  Set<E> intersection(Set<Object> other) => set.intersection(other);
-
-  @override
-  Set<E> union(Set<E> other) => set.union(other);
-
-  @override
-  Set<E> difference(Set<Object> other) => set.difference(other);
-
-  @override
-  void clear() => set.clear();
-
-  @override
-  Set<E> toSet() => set.toSet();
-}
-
-/// Throws an exception if the runtime type of [object] is not in
-/// [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of [object]
-/// at the call site by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-void assertType(String name, List<String> runtimeTypes, var object,
-    {bool showObjects = false}) {
-  String runtimeType = '${object.runtimeType}';
-  if (runtimeTypes != null && runtimeTypes.contains(runtimeType)) return;
-  throw '$name: $runtimeType'
-      '${showObjects ? ' ($object)' : ''}';
-}
-
-/// Callback for the [addCallback] of [DebugMap] that throws an exception if
-/// the runtime type of key/value pairs are not in [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of key/value
-/// pairs of a map by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-class MapTypeAsserter {
-  final String name;
-  final Map<String, List<String>> runtimeTypes;
-  final bool showObjects;
-
-  const MapTypeAsserter(this.name, this.runtimeTypes,
-      {bool this.showObjects = false});
-
-  void call(String methodName, var key, var value) {
-    check(key, value, '$methodName: ');
-  }
-
-  void check(var key, var value, [String text = '']) {
-    String keyType = '${key.runtimeType}';
-    String valueType = '${value.runtimeType}';
-    List<String> valuesTypes = runtimeTypes[keyType];
-    if (valuesTypes != null && valuesTypes.contains(valueType)) return;
-    throw '$name: $text$keyType => $valueType'
-        '${showObjects ? ' ($key => $value)' : ''}';
-  }
-}
-
-/// Callback for the [addCallback] of [DebugSet] or [DebugList]  that throws an
-/// exception if the runtime type of the elements are not in [runtimeTypes].
-///
-/// Use this to gradually build the set of actual runtime values of the elements
-/// of a collection by running test programs and adding to [runtimeTypes] when
-/// new type are found.
-class CollectionTypeAsserter {
-  final String name;
-  final List<String> runtimeTypes;
-  final bool showObjects;
-
-  const CollectionTypeAsserter(this.name, this.runtimeTypes,
-      {bool this.showObjects = false});
-
-  void call(String methodName, var element, _) {
-    check(element, '$methodName: ');
-  }
-
-  void check(var element, [String text = '']) {
-    String elementType = '${element.runtimeType}';
-    if (runtimeTypes.contains(elementType)) return;
-    throw '$name: $text$elementType'
-        '${showObjects ? ' ($element)' : ''}';
-  }
-}
diff --git a/pkg/compiler/lib/src/helpers/expensive_map.dart b/pkg/compiler/lib/src/helpers/expensive_map.dart
deleted file mode 100644
index 3161d64..0000000
--- a/pkg/compiler/lib/src/helpers/expensive_map.dart
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (c) 2013, 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.
-
-import "dart:collection";
-
-/// The expensive map is a data structure useful for tracking down
-/// excessive memory usage due to large maps. It acts as an ordinary
-/// hash map, but it uses 10 times more memory (by default).
-class ExpensiveMap<K, V> extends MapBase<K, V> {
-  final List _maps;
-
-  ExpensiveMap([int copies = 10]) : _maps = List.filled(copies, null) {
-    assert(copies > 0);
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i] = Map<K, V>();
-    }
-  }
-
-  @override
-  int get length => _maps[0].length;
-  @override
-  bool get isEmpty => _maps[0].isEmpty;
-  @override
-  bool get isNotEmpty => _maps[0].isNotEmpty;
-
-  @override
-  Iterable<K> get keys => _maps[0].keys;
-  @override
-  Iterable<V> get values => _maps[0].values;
-
-  @override
-  bool containsKey(Object key) => _maps[0].containsKey(key);
-  @override
-  bool containsValue(Object value) => _maps[0].containsValue(value);
-
-  @override
-  V operator [](Object key) => _maps[0][key];
-
-  @override
-  void forEach(void action(K key, V value)) {
-    _maps[0].forEach(action);
-  }
-
-  @override
-  void operator []=(K key, V value) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i][key] = value;
-    }
-  }
-
-  @override
-  V putIfAbsent(K key, V ifAbsent()) {
-    if (containsKey(key)) return this[key];
-    V value = ifAbsent();
-    this[key] = value;
-    return value;
-  }
-
-  @override
-  void addAll(Map<K, V> other) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].addAll(other);
-    }
-  }
-
-  @override
-  V remove(Object key) {
-    V result = _maps[0].remove(key);
-    for (int i = 1; i < _maps.length; i++) {
-      _maps[i].remove(key);
-    }
-    return result;
-  }
-
-  @override
-  void clear() {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].clear();
-    }
-  }
-
-  @override
-  Map<KR, VR> cast<KR, VR>() => Map.castFrom<K, V, KR, VR>(this);
-  @override
-  Iterable<MapEntry<K, V>> get entries => _maps[0].entries;
-
-  @override
-  void addEntries(Iterable<MapEntry<K, V>> entries) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].addEntries(entries);
-    }
-  }
-
-  @override
-  Map<KR, VR> map<KR, VR>(MapEntry<KR, VR> transform(K key, V value)) =>
-      _maps[0].map(transform);
-
-  @override
-  V update(K key, V update(V value), {V ifAbsent()}) {
-    V result;
-    for (int i = 0; i < _maps.length; i++) {
-      result = _maps[i].update(key, update, ifAbsent: ifAbsent);
-    }
-    return result;
-  }
-
-  @override
-  void updateAll(V update(K key, V value)) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].updateAll(update);
-    }
-  }
-
-  @override
-  void removeWhere(bool test(K key, V value)) {
-    for (int i = 0; i < _maps.length; i++) {
-      _maps[i].removeWhere(test);
-    }
-  }
-
-  @override
-  String toString() => "expensive(${_maps[0]}x${_maps.length})";
-}
diff --git a/pkg/compiler/lib/src/helpers/expensive_set.dart b/pkg/compiler/lib/src/helpers/expensive_set.dart
deleted file mode 100644
index 80163cd..0000000
--- a/pkg/compiler/lib/src/helpers/expensive_set.dart
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright (c) 2013, 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.
-
-import 'dart:collection';
-
-/// The expensive set is a data structure useful for tracking down
-/// excessive memory usage due to large sets. It acts as an ordinary
-/// hash set, but it uses 10 times more memory (by default).
-class ExpensiveSet<E> extends SetBase<E> {
-  final List _sets;
-
-  ExpensiveSet([int copies = 10]) : _sets = List.filled(copies, null) {
-    assert(copies > 0);
-    for (int i = 0; i < _sets.length; i++) {
-      _sets[i] = Set<E>();
-    }
-  }
-
-  @override
-  int get length => _sets[0].length;
-  @override
-  bool get isEmpty => _sets[0].isEmpty;
-  @override
-  bool get isNotEmpty => _sets[0].isNotEmpty;
-
-  @override
-  Iterator<E> get iterator => _sets[0].iterator;
-
-  @override
-  bool contains(Object object) => _sets[0].contains(object);
-  @override
-  E lookup(Object object) => _sets[0].lookup(object);
-
-  @override
-  void forEach(void action(E element)) {
-    _sets[0].forEach(action);
-  }
-
-  @override
-  bool add(E element) {
-    bool result = _sets[0].add(element);
-    for (int i = 1; i < _sets.length; i++) {
-      _sets[i].add(element);
-    }
-    return result;
-  }
-
-  @override
-  void addAll(Iterable<E> objects) {
-    for (E each in objects) {
-      add(each);
-    }
-  }
-
-  @override
-  bool remove(Object object) {
-    bool result = _sets[0].remove(object);
-    for (int i = 1; i < _sets.length; i++) {
-      _sets[i].remove(object);
-    }
-    return result;
-  }
-
-  @override
-  void clear() {
-    for (int i = 0; i < _sets.length; i++) {
-      _sets[i].clear();
-    }
-  }
-
-  @override
-  void removeAll(Iterable<Object> objectsToRemove) {
-    for (var each in objectsToRemove) {
-      remove(each);
-    }
-  }
-
-  @override
-  void removeWhere(bool test(E element)) {
-    removeAll(this.toList().where((e) => test(e)));
-  }
-
-  @override
-  void retainWhere(bool test(E element)) {
-    removeAll(toList().where((e) => !test(e)));
-  }
-
-  @override
-  bool containsAll(Iterable<Object> other) {
-    for (Object object in other) {
-      if (!this.contains(object)) return false;
-    }
-    return true;
-  }
-
-  Set _newSet() => ExpensiveSet(_sets.length);
-
-  @override
-  Set<E> intersection(Set<Object> other) {
-    Set<E> result = _newSet();
-    if (other.length < this.length) {
-      for (var element in other) {
-        if (this.contains(element)) result.add(element);
-      }
-    } else {
-      for (E element in this) {
-        if (other.contains(element)) result.add(element);
-      }
-    }
-    return result;
-  }
-
-  @override
-  Set<E> union(Set<E> other) {
-    return _newSet()
-      ..addAll(this)
-      ..addAll(other);
-  }
-
-  @override
-  Set<E> difference(Set<Object> other) {
-    Set<E> result = _newSet();
-    for (E element in this) {
-      if (!other.contains(element)) result.add(element);
-    }
-    return result;
-  }
-
-  @override
-  void retainAll(Iterable objectsToRetain) {
-    Set retainSet;
-    if (objectsToRetain is Set) {
-      retainSet = objectsToRetain;
-    } else {
-      retainSet = objectsToRetain.toSet();
-    }
-    retainWhere(retainSet.contains);
-  }
-
-  @override
-  Set<E> toSet() {
-    var result = ExpensiveSet<E>(_sets.length);
-    for (int i = 0; i < _sets.length; i++) {
-      result._sets[i] = _sets[i].toSet();
-    }
-    return result;
-  }
-
-  @override
-  String toString() => "expensive(${_sets[0]}x${_sets.length})";
-}
diff --git a/pkg/compiler/lib/src/helpers/helpers.dart b/pkg/compiler/lib/src/helpers/helpers.dart
deleted file mode 100644
index 4661c1f..0000000
--- a/pkg/compiler/lib/src/helpers/helpers.dart
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright (c) 2014, 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.
-
-/// Library for debugging helpers. The unittest analyze_unused_test checks that
-/// the helper are not used in production code.
-
-library dart2js.helpers;
-
-import 'package:kernel/text/indentation.dart' show Indentation;
-
-import '../common.dart';
-import '../diagnostics/invariant.dart' show DEBUG_MODE;
-
-export 'debug_collection.dart';
-export 'expensive_map.dart';
-export 'expensive_set.dart';
-export 'stats.dart';
-export 'trace.dart';
-export 'track_map.dart';
-
-/// Global flag to enable [debugPrint]. This should always be `true` by default
-/// and be set to `false` as a means to temporarily turn off all debugging
-/// printouts.
-const bool DEBUG_PRINT_ENABLED = true;
-
-/// Enables debug mode.
-///
-/// Sets the [DEBUG_MODE] to `true`.
-void enableDebugMode() {
-  DEBUG_MODE = true;
-}
-
-class _DebugIndentation extends Indentation {
-  @override
-  final String indentationUnit = " ";
-}
-
-_DebugIndentation _indentation = _DebugIndentation();
-
-/// Function signature of [debugPrint].
-typedef DebugPrint = Function(dynamic s);
-
-/// If [DEBUG_PRINT_ENABLED] is `true` print [s] using the current indentation.
-DebugPrint get debugPrint {
-  enableDebugMode();
-  // TODO(johnniwinther): Maybe disable debug mode after the call.
-  return _debugPrint;
-}
-
-/// Implementation of [debugPrint].
-_debugPrint(s) {
-  if (DEBUG_PRINT_ENABLED) print('${_indentation.indentation}$s');
-}
-
-/// Function signature of [debugWrapPrint].
-typedef DebugWrapPrint = Function(dynamic s, Function() f);
-
-/// Wraps the call to [f] with a print of 'start:$s' and 'end:$s' incrementing
-/// the current indentation used by [debugPrint] during the execution of [f].
-///
-/// Use this to get a tree-like debug printout for nested calls.
-DebugWrapPrint get debugWrapPrint {
-  enableDebugMode();
-  return _debugWrapPrint;
-}
-
-/// Implementation of [debugWrapPrint].
-_debugWrapPrint(s, f()) {
-  debugPrint('start:$s');
-  var result = _indentation.indentBlock(f);
-  debugPrint('end:$s');
-  return result;
-}
-
-/// Dummy method to mark breakpoints.
-debugBreak() {
-  enableDebugMode();
-}
-
-/// Function signature of [reportHere].
-typedef ReportHere = Function(
-    DiagnosticReporter reporter, Spannable node, String debugMessage);
-
-/// Print a message with a source location.
-ReportHere get reportHere {
-  enableDebugMode();
-  return _reportHere;
-}
-
-/// Implementation of [reportHere]
-_reportHere(DiagnosticReporter reporter, Spannable node, String debugMessage) {
-  // ignore: deprecated_member_use_from_same_package
-  reporter.reportInfoMessage(
-      node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
-}
-
-/// Set of tracked objects used by [track] and [ifTracked].
-var _trackedObjects = Set<Object>();
-
-/// Global default value for the `printTrace` option of [track] and [ifTracked].
-bool trackWithTrace = false;
-
-/// If [doTrack] is `true`, add [object] to the set of tracked objects.
-///
-/// If tracked, [message] is printed along the hash code and toString of
-/// [object]. If [printTrace] is `true` a trace printed additionally.
-/// If [printTrace] is `null`, [trackWithTrace] determines whether a trace is
-/// printed.
-///
-/// [object] is returned as the result of the method.
-track(bool doTrack, Object object, String message, {bool printTrace}) {
-  if (!doTrack) return object;
-  _trackedObjects.add(object);
-  String msg = 'track: ${object.hashCode}:$object:$message';
-  if (printTrace == null) printTrace = trackWithTrace;
-  if (printTrace) {
-    trace(msg);
-  } else {
-    debugPrint(msg);
-  }
-  return object;
-}
-
-/// Returns `true` if [object] is in the set of tracked objects.
-///
-/// If [message] is provided it is printed along the hash code and toString of
-/// [object]. If [printTrace] is `true` a trace printed additionally. If
-/// [printTrace] is `null`, [trackWithTrace] determines whether a trace is
-/// printed.
-bool ifTracked(Object object, {String message, bool printTrace}) {
-  if (_trackedObjects.contains(object)) {
-    if (message != null) {
-      String msg = 'tracked: ${object.hashCode}:$object:$message';
-      if (printTrace == null) printTrace = trackWithTrace;
-      if (printTrace) {
-        trace(msg);
-      } else {
-        debugPrint(msg);
-      }
-    }
-    return true;
-  }
-  return false;
-}
diff --git a/pkg/compiler/lib/src/helpers/stats.dart b/pkg/compiler/lib/src/helpers/stats.dart
deleted file mode 100644
index 3459d74..0000000
--- a/pkg/compiler/lib/src/helpers/stats.dart
+++ /dev/null
@@ -1,813 +0,0 @@
-// Copyright (c) 2014, 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.
-
-import 'dart:async' show EventSink;
-import 'dart:collection';
-import 'dart:convert';
-
-import 'package:kernel/text/indentation.dart' show Indentation;
-
-import '../../compiler.dart';
-import '../common.dart';
-import '../compiler.dart' show Compiler;
-import '../util/util.dart';
-
-// Helper methods for statistics.
-
-/// Current stats collector. Use [enableStatsOutput] to enable recording of
-/// stats.
-Stats get stats {
-  enableDebugMode();
-  if (_stats == null) {
-    _stats = const Stats();
-  }
-  return _stats;
-}
-
-Stats _stats;
-
-/// Enable recording of stats. Use [Stats.dumpStats] to output the record stats.
-///
-/// Pass the [outputProvider] of [Compiler] to generate stats into a separate
-/// file using [name] and [extension] for the filename. If omitted, stats are
-/// printed on standard out.
-///
-/// If [xml] is `true`, stats output is formatted as XML with a default
-/// extension of 'xml', otherwise the output is indented text with a default
-/// extension of 'log'.
-void enableStatsOutput(
-    {CompilerOutputProvider outputProvider,
-    bool xml = true,
-    String name = 'stats',
-    String extension,
-    int examples = 10}) {
-  if (_stats != null) {
-    throw StateError('Stats have already been initialized.');
-  }
-  enableDebugMode();
-
-  StatsOutput output;
-  if (outputProvider != null) {
-    if (extension == null) {
-      extension = xml ? 'xml' : 'log';
-    }
-    output = SinkOutput(outputProvider(name, extension));
-  } else {
-    output = const DebugOutput();
-  }
-  StatsPrinter printer;
-  if (xml) {
-    printer = XMLPrinter(output: output, examples: examples);
-  } else {
-    printer = ConsolePrinter(output: output, examples: examples);
-  }
-  _stats = ActiveStats(printer);
-}
-
-/// Interface for gathering and display of statistical information.
-/// This class serves as the noop collector.
-class Stats {
-  const Stats();
-
-  /// Registers [key], [value] pair in the map [id]. If [fromExisting] is
-  /// non-null and [key] already exists, the value associated with [key] will
-  /// be the return value of [fromExisting] when called with the existing value.
-  ///
-  /// The recorded information is not dumped automatically.
-  void recordMap(id, key, value, {fromExisting(value)}) {}
-
-  /// Returns the map [id] recorded with [recordMap].
-  Map getMap(id) => const {};
-
-  /// Registers [element] as an element of the list [id]. If provided, [data]
-  /// provides additional data for [element].
-  ///
-  /// The recorded information is dumped automatically on call to [dumpStats].
-  ///
-  /// Example:
-  ///   Calling [recordElement] like this:
-  ///     recordElement('foo', 'a', data: 'first-a-data');
-  ///     recordElement('foo', 'a', data: 'second-a-data');
-  ///     recordElement('foo', 'b');
-  ///     recordElement('bar', 'a', data: 'third-a-data');
-  ///     recordElement('bar', 'c');
-  ///   will result in a dump like this:
-  ///     foo: 2
-  ///      value=a data=second-a-data
-  ///      b
-  ///     bar: 2
-  ///      value=a data=third-a-data
-  ///      c
-  ///
-  void recordElement(id, element, {data}) {}
-
-  /// Returns the list [id] recorded with [recordElement].
-  Iterable getList(String id) => const [];
-
-  /// Registers [value] as an occurrence of [id]. If passed, [example] provides
-  /// an example data of the occurrence of [value].
-  ///
-  /// The recorded information is dumped automatically on call to [dumpStats].
-  ///
-  /// Example:
-  ///   Calling [recordFrequency] like this:
-  ///     recordFrequency('foo', 'a', 'first-a-data');
-  ///     recordFrequency('foo', 'a', 'second-a-data');
-  ///     recordFrequency('bar', 'b', 'first-b-data');
-  ///     recordFrequency('foo', 'c');
-  ///     recordFrequency('bar', 'b');
-  ///   will result in a dump like this:
-  ///     foo:
-  ///      a: 2
-  ///       first-a-data
-  ///       second-a-data
-  ///      c: 1
-  ///     bar:
-  ///      b: 2
-  ///       first-b-data
-  ///
-  void recordFrequency(id, value, [example]) {}
-
-  /// For each key/value pair in [map] the elements in the value are registered
-  /// as examples of occurrences of the key in [id].
-  void recordFrequencies(id, Map<dynamic, Iterable> map) {}
-
-  /// Returns the examples given for the occurrence of [value] for [id].
-  Iterable recordedFrequencies(id, value) => const [];
-
-  /// Increases the counter [id] by 1. If provided, [example] is used as an
-  /// example of the count and [data] provides additional information for
-  /// [example].
-  ///
-  /// The recorded information is dumped automatically on call to [dumpStats].
-  ///
-  /// Example:
-  ///   Calling [recordCounter] like this:
-  ///     recordCounter('foo', 'a');
-  ///     recordCounter('foo', 'a');
-  ///     recordCounter('foo', 'b');
-  ///     recordCounter('bar', 'c', 'first-c-data');
-  ///     recordCounter('bar', 'c', 'second-c-data');
-  ///     recordCounter('bar', 'd');
-  ///     recordCounter('bar', 'd');
-  ///     recordCounter('baz');
-  ///     recordCounter('baz');
-  ///   will result in a dump like this:
-  ///     foo: 3
-  ///      count=2 example=a
-  ///      count=1 example=b
-  ///     bar: 4
-  ///      count=2 examples=2
-  ///       c:
-  ///        first-c-data
-  ///        second-c-data
-  ///       d
-  ///     baz: 2
-  ///
-  void recordCounter(id, [example, data]) {}
-
-  /// Records the current stack trace under the key [id]. Only every
-  /// [sampleFrequency] call with the same id is recorded, and if omitted
-  /// [stackTraceSampleFrequency] is used.
-  void recordTrace(id, {int sampleFrequency}) {}
-
-  /// The default sample frequency used for recording stack traces.
-  int get stackTraceSampleFrequency => 0;
-
-  /// Set the default sample frequency used for recording stack traces.
-  void set stackTraceSampleFrequency(int value) {}
-
-  /// Dumps the stats for the recorded frequencies, sets, and counters. If
-  /// provided [beforeClose] is called before closing the dump output. This
-  /// can be used to include correlations on the collected data through
-  /// [dumpCorrelation].
-  void dumpStats({void beforeClose()}) {}
-
-  /// Prints the correlation between the elements of [a] and [b].
-  ///
-  /// Three sets are output using [idA] and [idB] as labels for the elements
-  /// [a] and [b]:
-  ///
-  ///   'idA && idB' lists the elements both in [a] and [b],
-  ///   '!idA && idB' lists the elements not in [a] but in [b], and
-  ///   'idA && !idB' lists the elements in [a] but not in [b].
-  ///
-  /// If [dataA] and/or [dataB] are provided, additional information on the
-  /// elements are looked up in [dataA] or [dataB] using [dataA] as the primary
-  /// source.
-  void dumpCorrelation(idA, Iterable a, idB, Iterable b,
-      {Map dataA, Map dataB}) {}
-}
-
-/// Interface for printing output data.
-///
-/// This class serves as the disabled output.
-class StatsOutput {
-  const StatsOutput();
-
-  /// Print [text] as on a separate line.
-  void println(String text) {}
-}
-
-/// Output to the [debugPrint] method.
-class DebugOutput implements StatsOutput {
-  const DebugOutput();
-
-  @override
-  void println(String text) => debugPrint(text);
-}
-
-/// Output to an [EventSink]. Used to output to a file through the
-/// [CompilerOutputProvider].
-class SinkOutput implements StatsOutput {
-  EventSink<String> sink;
-
-  SinkOutput(this.sink);
-
-  @override
-  void println(String text) {
-    sink.add(text);
-    sink.add('\n');
-  }
-}
-
-/// Interface for printing stats collected in [Stats].
-abstract class StatsPrinter {
-  /// The number of examples printer. If `null` all examples are printed.
-  int get examples => 0;
-
-  /// Start a group [id].
-  void start(String id) {}
-
-  /// Create a group [id] with content created by [createGroupContent].
-  void group(String id, void createGroupContent()) {
-    start(id);
-    createGroupContent();
-    end(id);
-  }
-
-  /// End a group [id].
-  void end(String id) {}
-
-  /// Start a stat entry for [id] with additional [data].
-  void open(String id, [Map<String, dynamic> data = const {}]) {}
-
-  /// Create a stat entry for [id] with additional [data] and content created by
-  /// [createChildContent].
-  void child(String id,
-      [Map<String, dynamic> data = const {}, void createChildContent()]) {
-    open(id, data);
-    if (createChildContent != null) createChildContent();
-    close(id);
-  }
-
-  /// End a stat entry for [id].
-  void close(String id) {}
-
-  /// Starts a group of additional information.
-  void beginExtra() {}
-
-  /// Starts a group of additional information.
-  void endExtra() {}
-}
-
-/// Abstract base class for [ConsolePrinter] and [XMLPrinter].
-abstract class BasePrinter extends StatsPrinter with Indentation {
-  @override
-  final int examples;
-  final StatsOutput output;
-
-  BasePrinter({this.output = const DebugOutput(), this.examples = 10}) {
-    indentationUnit = " ";
-  }
-}
-
-/// [StatsPrinter] that displays stats in console lines.
-class ConsolePrinter extends BasePrinter {
-  int extraLevel = 0;
-
-  ConsolePrinter({StatsOutput output = const DebugOutput(), int examples = 10})
-      : super(output: output, examples: examples);
-
-  @override
-  void open(String id, [Map<String, dynamic> data = const {}]) {
-    if (extraLevel > 0) return;
-
-    StringBuffer sb = StringBuffer();
-    sb.write(indentation);
-    String space = '';
-    if (data['title'] != null) {
-      sb.write('${data['title']}:');
-      space = ' ';
-      data.remove('title');
-    } else if (data['name'] != null) {
-      sb.write('${data['name']}');
-      space = ' ';
-      data.remove('name');
-    }
-    Iterable nonNullValues = data.values.where((v) => v != null);
-    if (nonNullValues.length == 1) {
-      sb.write('$space${nonNullValues.first}');
-    } else {
-      data.forEach((key, value) {
-        sb.write('$space$key=$value');
-        space = ' ';
-      });
-    }
-    output.println(sb.toString());
-    indentMore();
-  }
-
-  @override
-  void close(String id) {
-    if (extraLevel > 0) return;
-
-    indentLess();
-  }
-
-  @override
-  void beginExtra() {
-    if (extraLevel == 0) output.println('$indentation...');
-    extraLevel++;
-  }
-
-  @override
-  void endExtra() {
-    extraLevel--;
-  }
-}
-
-/// [StatsPrinter] that displays stats in XML format.
-class XMLPrinter extends BasePrinter {
-  static const HtmlEscape escape = HtmlEscape();
-  bool opened = false;
-
-  XMLPrinter({output = const DebugOutput(), int examples = 10})
-      : super(output: output, examples: examples);
-
-  @override
-  void start(String id) {
-    if (!opened) {
-      output.println('<?xml version="1.0" encoding="UTF-8"?>');
-      opened = true;
-    }
-    open(id);
-  }
-
-  @override
-  void end(String id) {
-    close(id);
-  }
-
-  @override
-  void open(String id, [Map<String, dynamic> data = const {}]) {
-    StringBuffer sb = StringBuffer();
-    sb.write(indentation);
-    sb.write('<$id');
-    data.forEach((key, value) {
-      if (value != null) {
-        sb.write(' $key="${escape.convert('$value')}"');
-      }
-    });
-    sb.write('>');
-    output.println(sb.toString());
-    indentMore();
-  }
-
-  @override
-  void close(String id) {
-    indentLess();
-    output.println('${indentation}</$id>');
-  }
-
-  @override
-  void beginExtra() {
-    open('extra');
-  }
-
-  @override
-  void endExtra() {
-    close('extra');
-  }
-}
-
-/// A node in a stack trace tree used to store and organize stack traces by
-/// common prefixes.
-class _StackTraceNode implements Comparable<_StackTraceNode> {
-  int count;
-  List<StackTraceLine> commonPrefix;
-  List<_StackTraceNode> subtraces;
-
-  _StackTraceNode(this.commonPrefix, this.count, this.subtraces);
-
-  _StackTraceNode.root() : this([], 0, []);
-
-  _StackTraceNode.leaf(StackTraceLines stackTrace)
-      : this(stackTrace.lines, 1, const []);
-
-  _StackTraceNode.node(List<StackTraceLine> commonPrefix, _StackTraceNode first,
-      _StackTraceNode second)
-      : this(commonPrefix, first.count + second.count, [first, second]);
-
-  void add(StackTraceLines stackTrace) {
-    count++;
-    if (!stackTrace.lines.isEmpty) {
-      addSubtrace(stackTrace);
-    }
-  }
-
-  void addSubtrace(StackTraceLines stackTrace) {
-    List<StackTraceLine> lines = stackTrace.lines;
-    for (_StackTraceNode subtrace in subtraces) {
-      int commonPrefixLength =
-          longestCommonPrefixLength(subtrace.commonPrefix, lines);
-      if (commonPrefixLength > 0) {
-        stackTrace = stackTrace.subtrace(commonPrefixLength);
-        if (commonPrefixLength == subtrace.commonPrefix.length) {
-          subtrace.add(stackTrace);
-        } else {
-          subtrace.commonPrefix =
-              subtrace.commonPrefix.sublist(commonPrefixLength);
-          subtraces.remove(subtrace);
-          subtraces.add(_StackTraceNode.node(
-              lines.sublist(0, commonPrefixLength),
-              subtrace,
-              _StackTraceNode.leaf(stackTrace)));
-        }
-        return;
-      }
-    }
-    subtraces.add(_StackTraceNode.leaf(stackTrace));
-  }
-
-  void dumpTraces(StatsPrinter printer) {
-    printer.open('trace', {'count': count, 'line': commonPrefix.first});
-    if (commonPrefix.length > 1) {
-      for (StackTraceLine line in commonPrefix.skip(1)) {
-        printer.child('trace', {'line': line});
-      }
-    }
-    dumpSubtraces(printer);
-    printer.close('trace');
-  }
-
-  void dumpSubtraces(StatsPrinter printer) {
-    if (!subtraces.isEmpty) {
-      subtraces.sort();
-      for (_StackTraceNode step in subtraces) {
-        step.dumpTraces(printer);
-      }
-    }
-  }
-
-  @override
-  int compareTo(_StackTraceNode other) {
-    // Sorts in decreasing count order.
-    return other.count - count;
-  }
-
-  void printOn(StringBuffer sb, String indentation) {
-    String countText = '$indentation$count  ';
-    sb.write(countText);
-    sb.write('\n');
-    indentation = ''.padLeft(countText.length, ' ');
-    if (commonPrefix != null) {
-      int index = 0;
-      for (StackTraceLine line in commonPrefix) {
-        sb.write(indentation);
-        if (index > 1) {
-          sb.write('...\n');
-          break;
-        }
-        sb.write(line);
-        sb.write('\n');
-        index++;
-      }
-    }
-    subtraces.sort();
-    for (_StackTraceNode subtrace in subtraces) {
-      subtrace.printOn(sb, indentation);
-    }
-  }
-
-  @override
-  String toString() {
-    StringBuffer sb = StringBuffer();
-    printOn(sb, '');
-    return sb.toString();
-  }
-}
-
-class _StackTraceTree extends _StackTraceNode {
-  final id;
-  int totalCount = 0;
-  final int sampleFrequency;
-
-  _StackTraceTree(this.id, this.sampleFrequency) : super.root();
-
-  @override
-  void dumpTraces(StatsPrinter printer) {
-    printer.open('trace', {
-      'id': id,
-      'totalCount': totalCount,
-      'sampleFrequency': sampleFrequency
-    });
-    dumpSubtraces(printer);
-    printer.close('trace');
-  }
-
-  void sample() {
-    if (totalCount++ % sampleFrequency == 0) {
-      add(stackTrace(offset: 3));
-    }
-  }
-}
-
-/// Actual implementation of [Stats].
-class ActiveStats implements Stats {
-  final StatsPrinter printer;
-  Map<dynamic, Map> maps = {};
-  Map<dynamic, Map<dynamic, List>> frequencyMaps = {};
-  Map<dynamic, Map> setsMap = {};
-  Map<dynamic, Map<dynamic, List>> countersMap = {};
-  Map<dynamic, _StackTraceTree> traceMap = {};
-  @override
-  int stackTraceSampleFrequency = 1;
-
-  ActiveStats(StatsPrinter this.printer);
-
-  @override
-  void recordMap(id, key, value, {fromExisting(value)}) {
-    Map map = maps.putIfAbsent(id, () => {});
-    if (fromExisting != null && map.containsKey(key)) {
-      map[key] = fromExisting(map[key]);
-    } else {
-      map[key] = value;
-    }
-  }
-
-  @override
-  Map getMap(key) {
-    return maps[key];
-  }
-
-  @override
-  void recordFrequency(id, value, [example]) {
-    Map<dynamic, List> map = frequencyMaps.putIfAbsent(id, () => {});
-    map.putIfAbsent(value, () => []);
-    map[value].add(example);
-  }
-
-  @override
-  void recordFrequencies(id, Map<dynamic, Iterable> frequencyMap) {
-    Map<dynamic, List> map = frequencyMaps.putIfAbsent(id, () => {});
-    frequencyMap.forEach((value, examples) {
-      map.putIfAbsent(value, () => []);
-      map[value].addAll(examples);
-    });
-  }
-
-  @override
-  Iterable recordedFrequencies(id, value) {
-    Map<dynamic, List> map = frequencyMaps[id];
-    if (map == null) return const [];
-    List list = map[value];
-    if (list == null) return const [];
-    return list;
-  }
-
-  @override
-  void recordCounter(id, [reason, example]) {
-    Map<dynamic, List> map = countersMap.putIfAbsent(id, () => {});
-    map.putIfAbsent(reason, () => []).add(example);
-  }
-
-  @override
-  void recordElement(key, element, {data}) {
-    setsMap.putIfAbsent(key, () => Map())[element] = data;
-  }
-
-  @override
-  void recordTrace(key, {int sampleFrequency}) {
-    if (sampleFrequency == null) {
-      sampleFrequency = stackTraceSampleFrequency;
-    }
-    traceMap
-        .putIfAbsent(key, () => _StackTraceTree(key, sampleFrequency))
-        .sample();
-  }
-
-  @override
-  Iterable getList(String key) {
-    Map map = setsMap[key];
-    if (map == null) return const [];
-    return map.keys;
-  }
-
-  @override
-  void dumpStats({void beforeClose()}) {
-    printer.start('stats');
-    dumpFrequencies();
-    dumpSets();
-    dumpCounters();
-    dumpTraces();
-    if (beforeClose != null) {
-      beforeClose();
-    }
-    printer.end('stats');
-  }
-
-  void dumpSets() {
-    printer.group('sets', () {
-      setsMap.forEach((k, set) {
-        dumpIterable('examples', '$k', set.keys,
-            limit: printer.examples, dataMap: set);
-      });
-    });
-  }
-
-  void dumpFrequencies() {
-    printer.group('frequencies', () {
-      frequencyMaps.forEach((key, Map<dynamic, List> map) {
-        printer.child('frequency', {'title': '$key'}, () {
-          dumpFrequency(map);
-        });
-      });
-    });
-  }
-
-  void dumpFrequency(Map<dynamic, Iterable> map) {
-    Map sortedMap = trySortMap(map);
-    sortedMap.forEach((k, list) {
-      dumpIterable('examples', '$k', list, limit: printer.examples);
-    });
-  }
-
-  void dumpCounters() {
-    printer.group('counters', () {
-      countersMap.keys.forEach(dumpCounter);
-    });
-  }
-
-  void dumpCounter(id) {
-    Map<dynamic, List> map = countersMap[id];
-    bool hasData(example) {
-      if (map == null) return false;
-      List list = map[example];
-      if (list == null) return false;
-      return list.any((data) => data != null);
-    }
-
-    int count = 0;
-    Map<dynamic, int> frequencyMap = {};
-    map.forEach((var category, List examples) {
-      if (category != null) {
-        frequencyMap.putIfAbsent(category, () => 0);
-        frequencyMap[category] += examples.length;
-      }
-      count += examples.length;
-    });
-    Map<int, Set> result = sortMap(inverseMap(frequencyMap), (a, b) => b - a);
-    int examplesLimit = null;
-    if (printer.examples != null && result.length >= printer.examples) {
-      examplesLimit = 0;
-    }
-    int counter = 0;
-    bool hasMore = false;
-    printer.open('counter', {'title': '$id', 'count': count});
-    result.forEach((int count, Set examples) {
-      if (counter == printer.examples) {
-        printer.beginExtra();
-        hasMore = true;
-      }
-      if (examples.length == 1 &&
-          (examplesLimit == 0 || !hasData(examples.first))) {
-        printer.child('examples', {'count': count, 'example': examples.first});
-      } else {
-        printer.child('examples', {'count': count, 'examples': examples.length},
-            () {
-          examples.forEach((example) {
-            dumpIterable('examples', '$example', map[example],
-                limit: examplesLimit, includeCount: false);
-          });
-        });
-      }
-      counter++;
-    });
-    if (hasMore) {
-      printer.endExtra();
-    }
-    printer.close('counter');
-  }
-
-  void dumpTraces() {
-    printer.group('traces', () {
-      traceMap.keys.forEach(dumpTrace);
-    });
-  }
-
-  void dumpTrace(key) {
-    _StackTraceTree tree = traceMap[key];
-    tree.dumpTraces(printer);
-  }
-
-  @override
-  void dumpCorrelation(keyA, Iterable a, keyB, Iterable b,
-      {Map dataA, Map dataB}) {
-    printer.child('correlations', {'title': '$keyA vs $keyB'}, () {
-      List aAndB = a.where((e) => e != null && b.contains(e)).toList();
-      List aAndNotB = a.where((e) => e != null && !b.contains(e)).toList();
-      List notAandB = b.where((e) => e != null && !a.contains(e)).toList();
-      dumpIterable('correlation', '$keyA && $keyB', aAndB,
-          dataMap: dataA, limit: printer.examples);
-      dumpIterable('correlation', '$keyA && !$keyB', aAndNotB,
-          dataMap: dataA, limit: printer.examples);
-      dumpIterable('correlation', '!$keyA && $keyB', notAandB,
-          dataMap: dataB, limit: printer.examples);
-    });
-  }
-
-  void dumpIterable(String tag, String title, Iterable iterable,
-      {int limit, Map dataMap, bool includeCount = true}) {
-    if (limit == 0) return;
-
-    Map<String, dynamic> childData = {};
-    Iterable nonNullIterable = iterable.where((e) => e != null);
-    if (nonNullIterable.isEmpty && !includeCount) {
-      childData['name'] = title;
-    } else {
-      childData['title'] = title;
-    }
-    if (includeCount) {
-      childData['count'] = iterable.length;
-    }
-    printer.child(tag, childData, () {
-      bool hasMore = false;
-      int counter = 0;
-      nonNullIterable.forEach((element) {
-        if (counter == limit) {
-          printer.beginExtra();
-          hasMore = true;
-        }
-        var data = dataMap != null ? dataMap[element] : null;
-        if (data != null) {
-          printer.child('example', {'value': element, 'data': data});
-        } else {
-          printer.child('example', {'value': element});
-        }
-        counter++;
-      });
-      if (hasMore) {
-        printer.endExtra();
-      }
-    });
-  }
-}
-
-/// Returns a map that is an inversion of [map], where the keys are the values
-/// of [map] and the values are the set of keys in [map] that share values.
-///
-/// If [equals] and [hashCode] are provided, these are used to determine
-/// equality among the values of [map].
-///
-/// If [isValidKey] is provided, this is used to determine with a value of [map]
-/// is a potential key of the inversion map.
-Map<V, Set<K>> inverseMap<K, V>(Map<K, V> map,
-    {bool equals(V key1, V key2),
-    int hashCode(V key),
-    bool isValidKey(V potentialKey)}) {
-  Map<V, Set<K>> result = LinkedHashMap<V, Set<K>>(
-      equals: equals, hashCode: hashCode, isValidKey: isValidKey);
-  map.forEach((k, v) {
-    if (isValidKey == null || isValidKey(v)) {
-      result.putIfAbsent(v, () => Set()).add(k);
-    }
-  });
-  return result;
-}
-
-/// Return a new map heuristically sorted by the keys of [map]. If the first
-/// key of [map] is [Comparable], the keys are sorted using [sortMap] under
-/// the assumption that all keys are [Comparable].
-/// Otherwise, the keys are sorted as string using their `toString`
-/// representation.
-Map<K, V> trySortMap<K, V>(Map<K, V> map) {
-  Iterable<K> iterable = map.keys.where((K k) => k != null);
-  if (iterable.isEmpty) return map;
-  var key = iterable.first;
-  if (key is Comparable<K>) {
-    return sortMap(map);
-  }
-  return sortMap(map, (a, b) => '$a'.compareTo('$b'));
-}
-
-/// Returns a new map in which the keys of [map] are sorted using [compare].
-/// If [compare] is null, the keys must be [Comparable].
-Map<K, V> sortMap<K, V>(Map<K, V> map, [int compare(K a, K b)]) {
-  List<K> keys = map.keys.toList();
-  keys.sort(compare);
-  Map<K, V> sortedMap = {};
-  keys.forEach((K k) => sortedMap[k] = map[k]);
-  return sortedMap;
-}
diff --git a/pkg/compiler/lib/src/helpers/trace.dart b/pkg/compiler/lib/src/helpers/trace.dart
deleted file mode 100644
index ff168df..0000000
--- a/pkg/compiler/lib/src/helpers/trace.dart
+++ /dev/null
@@ -1,349 +0,0 @@
-// Copyright (c) 2014, 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.
-
-import '../common.dart';
-import '../util/util.dart';
-
-/// Function signature for [trace].
-typedef Trace = void Function(String message,
-    {bool Function(String stackTrace) condition, int limit, bool throwOnPrint});
-
-/// Helper method for printing stack traces for debugging.
-///
-/// [message] is printed as the header of the stack trace.
-///
-/// If [condition] is provided, the stack trace is only printed if [condition]
-/// returns [:true:] on the stack trace text. This can be used to filter the
-/// printed stack traces based on their content. For instance only print stack
-/// traces that contain specific paths.
-///
-/// If [limit] is provided, the stack trace is limited to [limit] entries.
-///
-/// If [throwOnPrint] is `true`, [message] will be thrown after the stack trace
-/// has been printed. Together with [condition] this can be used to discover
-/// unknown call-sites in tests by filtering known call-sites and throwning
-/// otherwise.
-Trace get trace {
-  enableDebugMode();
-  return _trace;
-}
-
-void _trace(String message,
-    {bool condition(String stackTrace), int limit, bool throwOnPrint = false}) {
-  try {
-    throw '';
-  } catch (e, s) {
-    String stackTrace;
-    try {
-      stackTrace = prettifyStackTrace(s,
-          rangeStart: 1, rangeEnd: limit, filePrefix: stackTraceFilePrefix);
-    } catch (e) {
-      print(e);
-      stackTrace = '$s';
-    }
-    if (condition != null) {
-      if (!condition(stackTrace)) return;
-    }
-    print('$message\n$stackTrace');
-    if (throwOnPrint) throw message;
-  }
-}
-
-/// Creates a function to use as an `condition` argument in [trace] that filters
-/// stack traces that contains any of the [exceptions].
-traceExceptions(List<String> exceptions) {
-  return (String stackTrace) => !exceptions.any(stackTrace.contains);
-}
-
-/// Function signature of [traceAndReport].
-typedef TraceAndReport = void Function(
-    DiagnosticReporter reporter, Spannable node, String message,
-    {bool Function(String stackTrace) condition, int limit, bool throwOnPrint});
-
-/// Calls [reportHere] and [trace] with the same message.
-TraceAndReport get traceAndReport {
-  enableDebugMode();
-  return _traceAndReport;
-}
-
-/// Calls [reportHere] and [trace] with the same message.
-TraceAndReport get reportAndTrace => traceAndReport;
-
-/// Implementation of [traceAndReport].
-void _traceAndReport(
-    DiagnosticReporter reporter, Spannable node, String message,
-    {bool condition(String stackTrace), int limit, bool throwOnPrint = false}) {
-  trace(message, limit: limit, throwOnPrint: throwOnPrint,
-      condition: (String stackTrace) {
-    bool result = condition != null ? condition(stackTrace) : true;
-    if (result) {
-      reportHere(reporter, node, message);
-    }
-    return result;
-  });
-}
-
-/// Returns the [StackTraceLines] for the current call stack.
-///
-/// Use [offset] to discard the first [offset] calls of the call stack. Defaults
-/// to `1`, that is, discard the call to [stackTrace] itself. Use [limit] to
-/// limit the length of the stack trace lines.
-StackTraceLines stackTrace({int offset = 1, int limit = null}) {
-  int rangeStart = offset;
-  int rangeEnd = limit == null ? null : rangeStart + limit;
-  try {
-    throw '';
-  } catch (_, stackTrace) {
-    return StackTraceLines.fromTrace(stackTrace,
-        rangeStart: offset,
-        rangeEnd: rangeEnd,
-        filePrefix: stackTraceFilePrefix);
-  }
-}
-
-/// A stack trace as a sequence of [StackTraceLine]s.
-class StackTraceLines {
-  final List<StackTraceLine> lines;
-  final int maxFileLength;
-  final int maxLineNoLength;
-  final int maxColumnNoLength;
-
-  factory StackTraceLines.fromTrace(StackTrace s,
-      {int rangeStart, int rangeEnd, String filePrefix, String lambda = r'?'}) {
-    final RegExp indexPattern = RegExp(r'#\d+\s*');
-    int index = -1;
-    int maxFileLength = 0;
-    int maxLineNoLength = 0;
-    int maxColumnNoLength = 0;
-
-    String stackTrace = '$s';
-    List<StackTraceLine> lines = [];
-    // Parse each line in the stack trace. The supported line formats from the
-    // Dart VM are:
-    //    #n     <method-name> (<uri>:<line-no>:<column-no>)
-    //    #n     <method-name> (<uri>:<line-no>)
-    //    #n     <method-name> (<uri>)
-    // in which '<anonymous closure>' is the name used for an (unnamed) function
-    // expression. The last case is used for async bodies.
-    for (String line in stackTrace.split('\n')) {
-      try {
-        index++;
-        if (rangeStart != null && index < rangeStart) continue;
-        if (rangeEnd != null && index > rangeEnd) break;
-        if (line.isEmpty) continue;
-
-        // Strip index.
-        line = line.replaceFirst(indexPattern, '');
-        if (line == '<asynchronous suspension>') {
-          lines.add(StackTraceLine(index, '', '', '', line));
-          continue;
-        }
-
-        int leftParenPos = line.indexOf('(');
-        int rightParenPos = line.indexOf(')', leftParenPos);
-        int lastColon = line.lastIndexOf(':', rightParenPos);
-        int nextToLastColon = line.lastIndexOf(':', lastColon - 1);
-
-        String lineNo;
-        String columnNo;
-        if (nextToLastColon != -1) {
-          lineNo = line.substring(nextToLastColon + 1, lastColon);
-          columnNo = line.substring(lastColon + 1, rightParenPos);
-          try {
-            int.parse(columnNo);
-            try {
-              int.parse(lineNo);
-            } on FormatException {
-              // Only line number.
-              lineNo = columnNo;
-              columnNo = '';
-              nextToLastColon = lastColon;
-            }
-          } on FormatException {
-            // No column number nor line number.
-            lineNo = '';
-            columnNo = '';
-            nextToLastColon = rightParenPos;
-          }
-        } else {
-          lineNo = line.substring(lastColon + 1, rightParenPos);
-          columnNo = '';
-          try {
-            int.parse(lineNo);
-            nextToLastColon = lastColon;
-          } on FormatException {
-            // No column number nor line number.
-            lineNo = columnNo;
-            columnNo = '';
-            nextToLastColon = rightParenPos;
-          }
-        }
-
-        if (lineNo.length > maxLineNoLength) {
-          maxLineNoLength = lineNo.length;
-        }
-        if (columnNo.length > maxColumnNoLength) {
-          maxColumnNoLength = columnNo.length;
-        }
-
-        String file = line.substring(leftParenPos + 1, nextToLastColon);
-        if (filePrefix != null && file.startsWith(filePrefix)) {
-          file = file.substring(filePrefix.length);
-        }
-        if (file.length > maxFileLength) {
-          maxFileLength = file.length;
-        }
-        String method = line.substring(0, leftParenPos - 1);
-        if (lambda != null) {
-          method = method.replaceAll('<anonymous closure>', lambda);
-        }
-        lines.add(StackTraceLine(index, file, lineNo, columnNo, method));
-      } catch (e) {
-        throw 'Error prettifying "$line": $e';
-      }
-    }
-    return StackTraceLines.fromLines(
-        lines, maxFileLength, maxLineNoLength, maxColumnNoLength);
-  }
-
-  StackTraceLines.fromLines(this.lines, this.maxFileLength,
-      this.maxLineNoLength, this.maxColumnNoLength);
-
-  StackTraceLines subtrace(int offset) {
-    return StackTraceLines.fromLines(lines.sublist(offset), maxFileLength,
-        maxLineNoLength, maxColumnNoLength);
-  }
-
-  String prettify({bool showColumnNo = false, bool showDots = true}) {
-    StringBuffer sb = StringBuffer();
-    bool dots = true;
-    for (StackTraceLine line in lines) {
-      sb.write('  ');
-      line.printOn(sb,
-          fileLength: maxFileLength,
-          padding: showDots && dots ? ' .' : ' ',
-          lineNoLength: maxLineNoLength,
-          showColumnNo: showColumnNo,
-          columnNoLength: maxColumnNoLength);
-
-      dots = !dots;
-    }
-    return sb.toString();
-  }
-
-  @override
-  String toString() {
-    return prettify();
-  }
-}
-
-/// A parsed line from a stack trace.
-class StackTraceLine {
-  final int index;
-  final String file;
-  final String lineNo;
-  final String columnNo;
-  final String method;
-
-  StackTraceLine(
-      this.index, this.file, this.lineNo, this.columnNo, this.method);
-
-  void printOn(StringBuffer sb,
-      {String padding = ' ',
-      int fileLength,
-      int lineNoLength,
-      int columnNoLength,
-      bool showColumnNo = false}) {
-    String fileText = '${file} ';
-    if (fileLength != null) {
-      fileText = pad(fileText, fileLength, dots: padding);
-    }
-    String lineNoText = lineNo;
-    if (lineNoLength != null) {
-      lineNoText = pad(lineNoText, lineNoLength, padLeft: true);
-    }
-    String columnNoText = showColumnNo ? '' : columnNo;
-    if (columnNoLength != null) {
-      columnNoText = ':${pad(columnNoText, columnNoLength)}';
-    }
-    sb.write('$fileText $lineNoText$columnNoText $method\n');
-  }
-
-  @override
-  int get hashCode {
-    return 13 * index +
-        17 * file.hashCode +
-        19 * lineNo.hashCode +
-        23 * columnNo.hashCode +
-        29 * method.hashCode;
-  }
-
-  @override
-  bool operator ==(other) {
-    if (identical(this, other)) return true;
-    if (other is! StackTraceLine) return false;
-    return index == other.index &&
-        file == other.file &&
-        lineNo == other.lineNo &&
-        columnNo == other.columnNo &&
-        method == other.method;
-  }
-
-  @override
-  String toString() => "$method @ $file [$lineNo:$columnNo]";
-}
-
-// TODO(johnniwinther): Use this format for --throw-on-error.
-/// Converts the normal VM stack trace into a more compact and readable format.
-///
-/// The output format is `<file> . . . <lineNo>:<columnNo> <method>` where
-/// `<file>` is file name, `<lineNo>` is the line number, `<columnNo>` is the
-/// column number, and `<method>` is the method name.
-///
-/// If [rangeStart] and/or [rangeEnd] are provided, only the lines within the
-/// range are included.
-/// If [showColumnNo] is `false`, the `:<columnNo>` part is omitted.
-/// If [showDots] is `true`, the space between `<file>` and `<lineNo>` is padded
-/// with dots on every other line.
-/// If [filePrefix] is provided, then for  every file name thats starts with
-/// [filePrefix] only the remainder is printed.
-/// If [lambda] is non-null, anonymous closures are printed as [lambda].
-String prettifyStackTrace(StackTrace stackTrace,
-    {int rangeStart,
-    int rangeEnd,
-    bool showColumnNo = false,
-    bool showDots = true,
-    String filePrefix,
-    String lambda = r'?'}) {
-  return StackTraceLines.fromTrace(stackTrace,
-          rangeStart: rangeStart,
-          rangeEnd: rangeEnd,
-          filePrefix: filePrefix,
-          lambda: lambda)
-      .prettify(showColumnNo: showColumnNo, showDots: showDots);
-}
-
-/// Pads (or truncates) [text] to the [intendedLength].
-///
-/// If [padLeft] is [:true:] the text is padding inserted to the left of [text].
-/// A repetition of the [dots] text is used for padding.
-String pad(String text, int intendedLength,
-    {bool padLeft = false, String dots = ' '}) {
-  if (text.length == intendedLength) return text;
-  if (text.length > intendedLength) return text.substring(0, intendedLength);
-  if (dots == null || dots.isEmpty) dots = ' ';
-  int dotsLength = dots.length;
-  StringBuffer sb = StringBuffer();
-  if (!padLeft) {
-    sb.write(text);
-  }
-  for (int index = text.length; index < intendedLength; index++) {
-    int dotsIndex = index % dotsLength;
-    sb.write(dots.substring(dotsIndex, dotsIndex + 1));
-  }
-  if (padLeft) {
-    sb.write(text);
-  }
-  return sb.toString();
-}
diff --git a/pkg/compiler/lib/src/helpers/track_map.dart b/pkg/compiler/lib/src/helpers/track_map.dart
deleted file mode 100644
index 957d55c..0000000
--- a/pkg/compiler/lib/src/helpers/track_map.dart
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright (c) 2014, 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.
-
-/// The track map is a simple wrapper around a map that keeps track
-/// of the 'final' size of maps grouped by description. It allows
-/// determining the distribution of sizes for a specific allocation
-/// site and it can be used like this:
-///
-///    Map<String, int> map = new TrackMap<String, int>("my-map");
-///
-/// After finishing the compilaton, the histogram of track map sizes
-/// is printed but only when running in verbose mode.
-class TrackMap<K, V> implements Map<K, V> {
-  final Map<K, V> _map = {};
-  final List _counts;
-  static final Map<String, List<int>> _countsMap = {};
-
-  TrackMap._internal(this._counts);
-
-  factory TrackMap(String description) {
-    List counts = _countsMap.putIfAbsent(description, () => [0]);
-    Map result = TrackMap<K, V>._internal(counts);
-    counts[0]++;
-    return result;
-  }
-
-  static void printHistogram() {
-    _countsMap.forEach((description, counts) {
-      print('$description -- ${counts.length} maps');
-
-      // Count the total number of maps.
-      int sum = 0;
-      for (int i = 0; i < counts.length; i++) {
-        sum += counts[i];
-      }
-      int increment = sum ~/ 10;
-      int target = increment;
-      int accumulated = 0;
-      for (int i = 0; i < counts.length; i++) {
-        accumulated += counts[i];
-        if (accumulated >= target) {
-          String percent = (accumulated / sum * 100).toStringAsFixed(1);
-          print('  -- $percent%: length <= $i');
-          target += increment;
-        }
-      }
-    });
-  }
-
-  @override
-  int get length => _map.length;
-  @override
-  bool get isEmpty => _map.isEmpty;
-  @override
-  bool get isNotEmpty => _map.isNotEmpty;
-
-  @override
-  Iterable<K> get keys => _map.keys;
-  @override
-  Iterable<V> get values => _map.values;
-
-  @override
-  bool containsKey(Object key) => _map.containsKey(key);
-  @override
-  bool containsValue(Object value) => _map.containsValue(value);
-
-  @override
-  V operator [](Object key) => _map[key];
-  @override
-  String toString() => _map.toString();
-
-  @override
-  void forEach(void action(K key, V value)) {
-    _map.forEach(action);
-  }
-
-  @override
-  void operator []=(K key, V value) {
-    if (!_map.containsKey(key)) {
-      _notifyLengthChanged(1);
-      _map[key] = value;
-    }
-  }
-
-  @override
-  V putIfAbsent(K key, V ifAbsent()) {
-    if (containsKey(key)) return this[key];
-    V value = ifAbsent();
-    this[key] = value;
-    return value;
-  }
-
-  @override
-  V remove(Object key) {
-    if (_map.containsKey(key)) {
-      _notifyLengthChanged(-1);
-    }
-    return _map.remove(key);
-  }
-
-  @override
-  void addAll(Map<K, V> other) {
-    other.forEach((key, value) => this[key] = value);
-  }
-
-  @override
-  void clear() {
-    _notifyLengthChanged(-_map.length);
-    _map.clear();
-  }
-
-  @override
-  Map<KR, VR> cast<KR, VR>() => _map.cast<KR, VR>();
-  @override
-  Iterable<MapEntry<K, V>> get entries => _map.entries;
-
-  @override
-  void addEntries(Iterable<MapEntry<K, V>> entries) {
-    for (var entry in entries) this[entry.key] = entry.value;
-  }
-
-  @override
-  Map<KR, VR> map<KR, VR>(MapEntry<KR, VR> transform(K key, V value)) =>
-      _map.map(transform);
-
-  @override
-  V update(K key, V update(V value), {V ifAbsent()}) =>
-      _map.update(key, update, ifAbsent: ifAbsent);
-
-  @override
-  void updateAll(V update(K key, V value)) {
-    _map.updateAll(update);
-  }
-
-  @override
-  void removeWhere(bool test(K key, V value)) {
-    int before = _map.length;
-    _map.removeWhere(test);
-    _notifyLengthChanged(_map.length - before);
-  }
-
-  void _notifyLengthChanged(int delta) {
-    int oldLength = _map.length;
-    int newLength = oldLength + delta;
-    _counts[oldLength]--;
-    if (newLength < _counts.length) {
-      _counts[newLength]++;
-    } else {
-      _counts.add(1);
-      assert(newLength == _counts.length - 1);
-    }
-  }
-}
diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json
index 15d55fd..7f34cc7 100644
--- a/pkg/compiler/test/analyses/dart2js_allowed.json
+++ b/pkg/compiler/test/analyses/dart2js_allowed.json
@@ -54,44 +54,6 @@
   "pkg/compiler/lib/src/serialization/binary_sink.dart": {
     "Dynamic access of 'index'.": 1
   },
-  "pkg/compiler/lib/src/helpers/expensive_map.dart": {
-    "Dynamic access of 'length'.": 1,
-    "Dynamic access of 'isEmpty'.": 1,
-    "Dynamic access of 'isNotEmpty'.": 1,
-    "Dynamic access of 'keys'.": 1,
-    "Dynamic access of 'values'.": 1,
-    "Dynamic invocation of 'containsKey'.": 1,
-    "Dynamic invocation of 'containsValue'.": 1,
-    "Dynamic invocation of '[]'.": 1,
-    "Dynamic invocation of 'forEach'.": 1,
-    "Dynamic invocation of '[]='.": 1,
-    "Dynamic invocation of 'addAll'.": 1,
-    "Dynamic invocation of 'remove'.": 2,
-    "Dynamic invocation of 'clear'.": 1,
-    "Dynamic access of 'entries'.": 1,
-    "Dynamic invocation of 'addEntries'.": 1,
-    "Dynamic invocation of 'map'.": 1,
-    "Dynamic invocation of 'update'.": 1,
-    "Dynamic invocation of 'updateAll'.": 1,
-    "Dynamic invocation of 'removeWhere'.": 1
-  },
-  "pkg/compiler/lib/src/helpers/expensive_set.dart": {
-    "Dynamic access of 'length'.": 1,
-    "Dynamic access of 'isEmpty'.": 1,
-    "Dynamic access of 'isNotEmpty'.": 1,
-    "Dynamic access of 'iterator'.": 1,
-    "Dynamic invocation of 'contains'.": 1,
-    "Dynamic invocation of 'lookup'.": 1,
-    "Dynamic invocation of 'forEach'.": 1,
-    "Dynamic invocation of 'add'.": 2,
-    "Dynamic invocation of 'remove'.": 2,
-    "Dynamic invocation of 'clear'.": 1,
-    "Dynamic invocation of 'toSet'.": 1
-  },
-  "pkg/compiler/lib/src/helpers/track_map.dart": {
-    "Dynamic invocation of '-'.": 1,
-    "Dynamic invocation of '+'.": 1
-  },
   "pkg/compiler/lib/src/util/enumset.dart": {
     "Dynamic access of 'index'.": 4
   },
diff --git a/pkg/compiler/test/equivalence/id_equivalence.dart b/pkg/compiler/test/equivalence/id_equivalence.dart
index 879d6b9..6a91597 100644
--- a/pkg/compiler/test/equivalence/id_equivalence.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence.dart
@@ -61,3 +61,10 @@
     super.visitLabeledStatement(node);
   }
 }
+
+/// Print a message with a source location.
+void reportHere(
+    DiagnosticReporter reporter, Spannable node, String debugMessage) {
+  reporter.reportInfoMessage(
+      node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
+}
diff --git a/pkg/compiler/test/helpers/stats_test.dart b/pkg/compiler/test/helpers/stats_test.dart
deleted file mode 100644
index af0e96a..0000000
--- a/pkg/compiler/test/helpers/stats_test.dart
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2014, 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.7
-
-import 'package:expect/expect.dart';
-import 'package:compiler/src/helpers/helpers.dart';
-
-class CollectingOutput implements StatsOutput {
-  final StringBuffer sb = new StringBuffer();
-
-  @override
-  void println(String text) {
-    sb.write('$text\n');
-  }
-
-  @override
-  String toString() => sb.toString();
-}
-
-void main() {
-  testRecordElement();
-  testRecordFrequency();
-  testRecordCounter();
-}
-
-void testRecordElement() {
-  test((Stats stats) {
-    stats.recordElement('foo', 'a', data: 'first-a-data');
-    stats.recordElement('foo', 'a', data: 'second-a-data');
-    stats.recordElement('foo', 'b');
-    stats.recordElement('bar', 'a', data: 'third-a-data');
-    stats.recordElement('bar', 'c');
-  }, r'''
-foo: 2
- value=a data=second-a-data
- b
-bar: 2
- value=a data=third-a-data
- c
-''');
-}
-
-void testRecordFrequency() {
-  test((Stats stats) {
-    stats.recordFrequency('foo', 'a', 'first-a-data');
-    stats.recordFrequency('foo', 'a', 'second-a-data');
-    stats.recordFrequency('bar', 'b', 'first-b-data');
-    stats.recordFrequency('foo', 'c');
-    stats.recordFrequency('bar', 'b');
-  }, r'''
-foo:
- a: 2
-  first-a-data
-  second-a-data
- c: 1
-bar:
- b: 2
-  first-b-data
-''');
-}
-
-void testRecordCounter() {
-  test((Stats stats) {
-    stats.recordCounter('foo', 'a');
-    stats.recordCounter('foo', 'a');
-    stats.recordCounter('foo', 'b');
-    stats.recordCounter('bar', 'c', 'first-c-data');
-    stats.recordCounter('bar', 'c', 'second-c-data');
-    stats.recordCounter('bar', 'd');
-    stats.recordCounter('bar', 'd');
-    stats.recordCounter('baz');
-    stats.recordCounter('baz');
-  }, r'''
-foo: 3
- count=2 example=a
- count=1 example=b
-bar: 4
- count=2 examples=2
-  c:
-   first-c-data
-   second-c-data
-  d
-baz: 2
-''');
-}
-
-void test(f(Stats stats), expectedDump) {
-  CollectingOutput output = new CollectingOutput();
-  Stats stats = new ActiveStats(new ConsolePrinter(output: output));
-  f(stats);
-  stats.dumpStats();
-  print(output.toString());
-  Expect.equals(expectedDump, output.toString());
-}
diff --git a/pkg/compiler/test/model/constant_value_test.dart b/pkg/compiler/test/model/constant_value_test.dart
index 9822945..c289332 100644
--- a/pkg/compiler/test/model/constant_value_test.dart
+++ b/pkg/compiler/test/model/constant_value_test.dart
@@ -8,14 +8,14 @@
 
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
-import 'package:compiler/src/helpers/helpers.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/constants/values.dart';
+import 'package:compiler/src/diagnostics/invariant.dart' show DEBUG_MODE;
 import '../helpers/type_test_helper.dart';
 
 void main() {
-  enableDebugMode();
+  DEBUG_MODE = true;
 
   asyncTest(() async {
     TypeEnvironment env = await TypeEnvironment.create("""
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.expect
@@ -151,6 +151,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///constructor_calls.dart:
 - E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.strong.transformed.expect
@@ -151,6 +151,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///constructor_calls.dart:
 - E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.expect
@@ -151,6 +151,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///constructor_calls.dart:
 - E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.modular.expect
@@ -151,6 +151,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///constructor_calls.dart:
 - E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
index 0b6fe6e..7840205 100644
--- a/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/constructor_calls.dart.weak.transformed.expect
@@ -151,6 +151,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///constructor_calls.dart:
 - E. (from org-dartlang-testcase:///constructor_calls.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///constructor_calls.dart:13:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
index 6da4cc5..cc27a95 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.expect
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
index 6da4cc5..cc27a95 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.strong.transformed.expect
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
index cc9e359..5838648 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.expect
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
index cc9e359..5838648 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.modular.expect
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
index cc9e359..5838648 100644
--- a/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/entries_with_type_arguments.dart.weak.transformed.expect
@@ -46,6 +46,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///entries_with_type_arguments.dart:
 - E. (from org-dartlang-testcase:///entries_with_type_arguments.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E.named (from org-dartlang-testcase:///entries_with_type_arguments.dart:12:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
index 95879d2..162a26b 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
index d680f8a..1444aa0 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
index f8907f3..6d6adb6 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
index f8907f3..6d6adb6 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
index 4417c2a..d61d9a5 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
@@ -118,7 +118,7 @@
 org-dartlang-testcase:///enum_as_supertype.dart:
 - EA. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
 - _EA&_Enum&A. (from org-dartlang-testcase:///enum_as_supertype.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - EB. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
 - _EB&_Enum&B. (from org-dartlang-testcase:///enum_as_supertype.dart:15:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
index 494cf2f..ac5b77e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
index 494cf2f..ac5b77e 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.strong.transformed.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.modular.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
index ae69448..263bb3d 100644
--- a/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/inference_in_constructor_parameters.dart.weak.transformed.expect
@@ -49,7 +49,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inference_in_constructor_parameters.dart:
 - E1. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:10:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:16:9)
 - E3. (from org-dartlang-testcase:///inference_in_constructor_parameters.dart:19:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
index 7e8bae6..07b42df 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
index 7e8bae6..07b42df 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
index fb83333..8ce162b 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
index fb83333..8ce162b 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
index fb83333..8ce162b 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
@@ -137,5 +137,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///instantiated_generic_enum_types.dart:
 - E. (from org-dartlang-testcase:///instantiated_generic_enum_types.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
index 1da7d5a..cbaf5c4 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
index 1da7d5a..cbaf5c4 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
index 32c1780..8ce5ddc 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
index 32c1780..8ce5ddc 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
index 32c1780..8ce5ddc 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
@@ -41,5 +41,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48084.dart:
 - E. (from org-dartlang-testcase:///issue48084.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
index d0efd75..f964e09 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
index d0efd75..f964e09 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.strong.transformed.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
index e5315e1..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
index e5315e1..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.modular.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
index e5315e1..4aede41 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48181.dart.weak.transformed.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///issue48181.dart:
 - E. (from org-dartlang-testcase:///issue48181.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
index c358d70..29920d5 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
index c358d70..29920d5 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
index 16019e2..aed1af8 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
index 16019e2..aed1af8 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
index 16019e2..aed1af8 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
@@ -63,6 +63,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///members.dart:
 - E. (from org-dartlang-testcase:///members.dart:14:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
index 9056dd8..49718de 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
index 9056dd8..49718de 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
index 5c96c28..cbc80ff 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
index 5c96c28..cbc80ff 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
index 5c96c28..cbc80ff 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
@@ -70,7 +70,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///named_arguments.dart:
 - E0. (from org-dartlang-testcase:///named_arguments.dart:12:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1. (from org-dartlang-testcase:///named_arguments.dart:21:9)
 - E2. (from org-dartlang-testcase:///named_arguments.dart:33:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
index 6b5605e..a84ac89 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
@@ -67,7 +67,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_constructor.dart:
 - C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
 - C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
index 6b5605e..a84ac89 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
@@ -67,7 +67,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_constructor.dart:
 - C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
 - C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
index e8052bd..6ce1261 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
@@ -67,7 +67,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_constructor.dart:
 - C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
 - C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
index e8052bd..6ce1261 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
@@ -67,7 +67,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_constructor.dart:
 - C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
 - C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
index e8052bd..6ce1261 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
@@ -67,7 +67,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_constructor.dart:
 - C. (from org-dartlang-testcase:///redirecting_constructor.dart:16:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - C.named1 (from org-dartlang-testcase:///redirecting_constructor.dart:19:9)
 - C.named2 (from org-dartlang-testcase:///redirecting_constructor.dart:20:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
index ffb1eca..309b974 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
index ffb1eca..309b974 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.strong.transformed.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.modular.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
index 08918e1..8f727d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/qualified_names_with_no_type_arguments.dart.weak.transformed.expect
@@ -24,5 +24,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:
 - E.b (from org-dartlang-testcase:///qualified_names_with_no_type_arguments.dart:8:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
index 99bf4f6..81dd3f0 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
index 99bf4f6..81dd3f0 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
index 352aa87..afd513d 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
index 352aa87..afd513d 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
index 352aa87..afd513d 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
@@ -73,7 +73,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///redirecting_initializers.dart:
 - E1. (from org-dartlang-testcase:///redirecting_initializers.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///redirecting_initializers.dart:12:9)
 - E2. (from org-dartlang-testcase:///redirecting_initializers.dart:21:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
index b546ffd..edb79d9 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
index b546ffd..edb79d9 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
index c1e1607..aaeb527 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
index c1e1607..aaeb527 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
index c1e1607..aaeb527 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
@@ -54,7 +54,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_fields.dart:
 - E1. (from org-dartlang-testcase:///simple_fields.dart:11:9)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E1.named (from org-dartlang-testcase:///simple_fields.dart:13:9)
 - E2. (from org-dartlang-testcase:///simple_fields.dart:24:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
index 8c56fb4..0e0079c 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
index 8c56fb4..0e0079c 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.strong.transformed.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.modular.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
index fbe74f9..14829b4 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_interfaces.dart.weak.transformed.expect
@@ -114,7 +114,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///simple_interfaces.dart:
 - E1. (from org-dartlang-testcase:///simple_interfaces.dart:9:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_interfaces.dart:16:6)
 - E3. (from org-dartlang-testcase:///simple_interfaces.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
index 6e10e5c..cf6273c 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
@@ -128,7 +128,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
index 4a5994b..8b41530 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
@@ -129,7 +129,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
index 82c66e8..ec20440 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
@@ -128,7 +128,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
index 82c66e8..ec20440 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
@@ -128,7 +128,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
index af40a65..364ca56 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
@@ -129,7 +129,7 @@
 org-dartlang-testcase:///simple_mixins.dart:
 - E1. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
 - _E1&_Enum&A. (from org-dartlang-testcase:///simple_mixins.dart:19:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - E2. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
 - _E2&_Enum&A&B. (from org-dartlang-testcase:///simple_mixins.dart:21:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
index 2a27047..5a75aa0 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
index f14e87d..c4ce6f4 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
index 93e970e..08ab64c 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
index 93e970e..08ab64c 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
index af64aef..357bbc8 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
@@ -50,5 +50,5 @@
 - E. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM&M. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
 - _E&_Enum&GM. (from org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
index 80eb1d7..5144c47 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.expect
@@ -64,6 +64,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///annotation_on_enum_values.dart:
 - Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
index 80eb1d7..5144c47 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.modular.expect
@@ -64,6 +64,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///annotation_on_enum_values.dart:
 - Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
index 80eb1d7..5144c47 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.weak.transformed.expect
@@ -64,6 +64,6 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///annotation_on_enum_values.dart:
 - Foo. (from org-dartlang-testcase:///annotation_on_enum_values.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Fisk.fisk (from org-dartlang-testcase:///annotation_on_enum_values.dart:12:9)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
index 183d7ef..69399bb 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.expect
@@ -295,7 +295,7 @@
 // pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
 //   index,
 //   ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
 //   final int index;
 //             ^^^^^
 //
@@ -687,7 +687,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///duplicated_declarations.dart:
 - Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
 - AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
index 183d7ef..69399bb 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.modular.expect
@@ -295,7 +295,7 @@
 // pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
 //   index,
 //   ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
 //   final int index;
 //             ^^^^^
 //
@@ -687,7 +687,7 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///duplicated_declarations.dart:
 - Enum#1. (from org-dartlang-testcase:///duplicated_declarations.dart:83:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
 - Enum. (from org-dartlang-testcase:///duplicated_declarations.dart:76:6)
 - AnotherEnum. (from org-dartlang-testcase:///duplicated_declarations.dart:89:6)
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
index aaa7492..b25af41 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.weak.outline.expect
@@ -295,7 +295,7 @@
 // pkg/front_end/testcases/general/duplicated_declarations.dart:94:3: Error: Can't declare a member that conflicts with an inherited one.
 //   index,
 //   ^^^^^
-// sdk/lib/core/enum.dart:74:13: Context: This is the inherited member.
+// sdk/lib/core/enum.dart:101:13: Context: This is the inherited member.
 //   final int index;
 //             ^^^^^
 //
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum_names_from_core.dart:
 - E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.modular.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum_names_from_core.dart:
 - E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
index f367499..05395c7 100644
--- a/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/enum_names_from_core.dart.weak.transformed.expect
@@ -65,5 +65,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum_names_from_core.dart:
 - E. (from org-dartlang-testcase:///enum_names_from_core.dart:15:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
index a1967bf..cb38609 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.expect
@@ -46,5 +46,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///metadata_enum.dart:
 - E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
index a1967bf..cb38609 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.modular.expect
@@ -46,5 +46,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///metadata_enum.dart:
 - E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
index a1967bf..cb38609 100644
--- a/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/metadata_enum.dart.weak.transformed.expect
@@ -46,5 +46,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///metadata_enum.dart:
 - E. (from org-dartlang-testcase:///metadata_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.modular.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
index 5f1e09a..4cd6fc3 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.weak.transformed.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum_values.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.modular.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum_values.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
index 624054f..dcbfa43 100644
--- a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.weak.transformed.expect
@@ -38,5 +38,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///inferred_type_is_enum_values.dart:
 - E. (from org-dartlang-testcase:///inferred_type_is_enum_values.dart:8:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
index 79d95f1..918c16c 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -233,5 +233,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index 3686411..2bde6d6 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -631,5 +631,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
index 8c3d6c3..60fc699 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -240,5 +240,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
index 8c3d6c3..60fc699 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.modular.expect
@@ -240,5 +240,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index 081a23c..16befe0 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -638,5 +638,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///return_null.dart:
 - Enum. (from org-dartlang-testcase:///return_null.dart:43:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
index c152a0b..ba9e958 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.expect
@@ -113,5 +113,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
index c152a0b..ba9e958 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.strong.transformed.expect
@@ -113,5 +113,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.expect
@@ -117,5 +117,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.modular.expect
@@ -117,5 +117,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
index da9cc12..f2bdd6e 100644
--- a/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/switch_nullable_enum.dart.weak.transformed.expect
@@ -117,5 +117,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///switch_nullable_enum.dart:
 - Enum. (from org-dartlang-testcase:///switch_nullable_enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
index 5076108..2f07c05 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.expect
@@ -622,5 +622,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///unsound_checks_lib.dart:
 - E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
index 5076108..2f07c05 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.modular.expect
@@ -622,5 +622,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///unsound_checks_lib.dart:
 - E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
index e968e87e..53688d7 100644
--- a/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/unsound_checks.dart.weak.transformed.expect
@@ -643,5 +643,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///unsound_checks_lib.dart:
 - E. (from org-dartlang-testcase:///unsound_checks_lib.dart:145:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.expect
@@ -39,5 +39,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.modular.expect
@@ -39,5 +39,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
index 71a6850..092ba49 100644
--- a/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/enum.dart.weak.transformed.expect
@@ -39,5 +39,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - Foo. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
index 0a517eb..c15892f 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
index 0a517eb..c15892f 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.strong.transformed.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
index 4d0ac34..4f9cbd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
index 4d0ac34..4f9cbd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.modular.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
index 4d0ac34..4f9cbd3 100644
--- a/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/static_field_lowering/enum.dart.weak.transformed.expect
@@ -28,5 +28,5 @@
 Constructor coverage from constants:
 org-dartlang-testcase:///enum.dart:
 - A. (from org-dartlang-testcase:///enum.dart:5:6)
-- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
 - Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index f57a6c4..370b9d7 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -330,7 +330,6 @@
   IsolateSpawnState(Dart_Port parent_port,
                     Dart_Port origin_id,
                     const char* script_url,
-                    const Function& func,
                     PersistentHandle* closure_tuple_handle,
                     SerializedObjectBuffer* message_buffer,
                     const char* package_config,
@@ -415,7 +414,6 @@
 IsolateSpawnState::IsolateSpawnState(Dart_Port parent_port,
                                      Dart_Port origin_id,
                                      const char* script_url,
-                                     const Function& func,
                                      PersistentHandle* closure_tuple_handle,
                                      SerializedObjectBuffer* message_buffer,
                                      const char* package_config,
@@ -438,30 +436,11 @@
       serialized_message_(message_buffer->StealMessage()),
       paused_(paused),
       errors_are_fatal_(errors_are_fatal) {
-  // Either we have a top-level function or we have a closure.
-  ASSERT((closure_tuple_handle_ != nullptr) == func.IsNull());
+  ASSERT(closure_tuple_handle_ != nullptr);
 
   auto thread = Thread::Current();
   auto isolate = thread->isolate();
 
-  if (!func.IsNull()) {
-    auto zone = thread->zone();
-    const auto& cls = Class::Handle(zone, func.Owner());
-    const auto& lib = Library::Handle(zone, cls.library());
-    const auto& lib_url = String::Handle(zone, lib.url());
-    library_url_ = NewConstChar(lib_url.ToCString());
-
-    String& func_name = String::Handle(zone);
-    func_name = func.name();
-    function_name_ = NewConstChar(String::ScrubName(func_name));
-    if (!cls.IsTopLevel()) {
-      const auto& class_name = String::Handle(zone, cls.Name());
-      class_name_ = NewConstChar(class_name.ToCString());
-    }
-  } else {
-    ASSERT(closure_tuple_handle != nullptr);
-  }
-
   // Inherit flags from spawning isolate.
   isolate->FlagsCopyTo(isolate_flags());
 }
@@ -908,19 +887,6 @@
   return result;
 }
 
-static FunctionPtr GetTopLevelFunction(Zone* zone, const Instance& closure) {
-  if (closure.IsClosure()) {
-    auto& func = Function::Handle(zone);
-    func = Closure::Cast(closure).function();
-    if (func.IsImplicitClosureFunction() && func.is_static()) {
-      ASSERT(Closure::Cast(closure).context() == Context::null());
-      // Get the parent function so that we get the right function name.
-      return func.parent_function();
-    }
-  }
-  return Function::null();
-}
-
 DEFINE_NATIVE_ENTRY(Isolate_spawnFunction, 0, 10) {
   GET_NON_NULL_NATIVE_ARGUMENT(SendPort, port, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(String, script_uri, arguments->NativeArgAt(1));
@@ -933,20 +899,17 @@
   GET_NATIVE_ARGUMENT(String, packageConfig, arguments->NativeArgAt(8));
   GET_NATIVE_ARGUMENT(String, debugName, arguments->NativeArgAt(9));
 
-  const auto& func = Function::Handle(zone, GetTopLevelFunction(zone, closure));
   PersistentHandle* closure_tuple_handle = nullptr;
-  if (func.IsNull()) {
-    // We have a non-toplevel closure that we might need to copy.
-    // Result will be [<closure-copy>, <objects-in-msg-to-rehash>]
-    const auto& closure_copy_tuple = Object::Handle(
-        zone, CopyMutableObjectGraph(closure));  // Throws if it fails.
-    ASSERT(closure_copy_tuple.IsArray());
-    ASSERT(Object::Handle(zone, Array::Cast(closure_copy_tuple).At(0))
-               .IsClosure());
-    closure_tuple_handle =
-        isolate->group()->api_state()->AllocatePersistentHandle();
-    closure_tuple_handle->set_ptr(closure_copy_tuple.ptr());
-  }
+  // We have a non-toplevel closure that we might need to copy.
+  // Result will be [<closure-copy>, <objects-in-msg-to-rehash>]
+  const auto& closure_copy_tuple = Object::Handle(
+      zone, CopyMutableObjectGraph(closure));  // Throws if it fails.
+  ASSERT(closure_copy_tuple.IsArray());
+  ASSERT(
+      Object::Handle(zone, Array::Cast(closure_copy_tuple).At(0)).IsClosure());
+  closure_tuple_handle =
+      isolate->group()->api_state()->AllocatePersistentHandle();
+  closure_tuple_handle->set_ptr(closure_copy_tuple.ptr());
 
   bool fatal_errors = fatalErrors.IsNull() ? true : fatalErrors.value();
   Dart_Port on_exit_port = onExit.IsNull() ? ILLEGAL_PORT : onExit.Id();
@@ -964,15 +927,13 @@
   const char* utf8_debug_name =
       debugName.IsNull() ? NULL : String2UTF8(debugName);
   if (closure_tuple_handle != nullptr && utf8_debug_name == nullptr) {
-    ASSERT(func.IsNull());
-
     const auto& closure_function = Function::Handle(zone, closure.function());
     utf8_debug_name =
         NewConstChar(closure_function.QualifiedUserVisibleNameCString());
   }
 
   std::unique_ptr<IsolateSpawnState> state(new IsolateSpawnState(
-      port.Id(), isolate->origin_id(), String2UTF8(script_uri), func,
+      port.Id(), isolate->origin_id(), String2UTF8(script_uri),
       closure_tuple_handle, &message_buffer, utf8_package_config,
       paused.value(), fatal_errors, on_exit_port, on_error_port,
       utf8_debug_name, isolate->group()));
diff --git a/runtime/tests/vm/dart/isolates/spawn_generic_function_test.dart b/runtime/tests/vm/dart/isolates/spawn_generic_function_test.dart
new file mode 100644
index 0000000..3b9831a
--- /dev/null
+++ b/runtime/tests/vm/dart/isolates/spawn_generic_function_test.dart
@@ -0,0 +1,45 @@
+// 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.
+//
+// Tests that generic functions are spawned with correct type arguments
+
+import 'dart:isolate';
+import 'package:expect/expect.dart';
+
+void func<T>(T o) {
+  print("$o:$T");
+  Expect.equals("int", "$T");
+}
+
+void call2(dynamic f) {
+  f(2);
+}
+
+void call4(dynamic f) {
+  f(4);
+}
+
+void main() async {
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(func<int>, 1, onExit: rp.sendPort);
+    await rp.first;
+  }
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(call2, func<int>, onExit: rp.sendPort);
+    await rp.first;
+  }
+  void Function(int) to = func;
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(to, 3, onExit: rp.sendPort);
+    await rp.first;
+  }
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(call4, to, onExit: rp.sendPort);
+    await rp.first;
+  }
+}
diff --git a/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart b/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart
new file mode 100644
index 0000000..8529015
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolates/spawn_generic_function_test.dart
@@ -0,0 +1,33 @@
+// 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.
+//
+// Tests that generic functions are spawned with correct type arguments
+
+// @dart = 2.9
+
+import 'dart:isolate';
+import 'package:expect/expect.dart';
+
+void func<T>(T o) {
+  print("$o:$T");
+  Expect.equals("int", "$T");
+}
+
+void call4(dynamic f) {
+  f(4);
+}
+
+void main() async {
+  void Function(int) to = func;
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(to, 3, onExit: rp.sendPort);
+    await rp.first;
+  }
+  {
+    final rp = ReceivePort();
+    Isolate.spawn(call4, to, onExit: rp.sendPort);
+    await rp.first;
+  }
+}
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index aa1d703..c063152 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -3476,8 +3476,9 @@
     return;
   }
 
+#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
   // Split moves from stack to stack, none of the architectures provides
-  // memory to memory move instructions.
+  // memory to memory move instructions. But RISC-V needs to avoid TMP.
   if (source.IsStack() && destination.IsStack()) {
     Register scratch = TMP;
     if (TMP == kNoRegister) {
@@ -3493,6 +3494,7 @@
     }
     return;
   }
+#endif
 
   const bool sign_or_zero_extend = dst_container_size > src_container_size;
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
index c31d864..11b6467 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_riscv.cc
@@ -898,6 +898,15 @@
   }
 }
 
+// See FfiCallInstr::MakeLocationSummary.
+static Register WithIntermediateMarshalling(Register r) {
+  if (r == A2) return T2;  // A2=CODE_REG
+  if (r == A3) return T3;  // A3=TMP
+  if (r == A4) return T4;  // A4=TMP2
+  if (r == A5) return T5;  // A5=PP
+  return r;
+}
+
 void FlowGraphCompiler::EmitNativeMoveArchitecture(
     const compiler::ffi::NativeLocation& destination,
     const compiler::ffi::NativeLocation& source) {
@@ -915,14 +924,13 @@
   if (source.IsRegisters()) {
     const auto& src = source.AsRegisters();
     ASSERT(src.num_regs() == 1);
-    const auto src_reg = src.reg_at(0);
+    const auto src_reg = WithIntermediateMarshalling(src.reg_at(0));
 
     if (destination.IsRegisters()) {
       const auto& dst = destination.AsRegisters();
       ASSERT(dst.num_regs() == 1);
-      const auto dst_reg = dst.reg_at(0);
+      const auto dst_reg = WithIntermediateMarshalling(dst.reg_at(0));
       if (!sign_or_zero_extend) {
-        // TODO(riscv): Unreachable? Calling convention always extends.
         __ mv(dst_reg, src_reg);
       } else {
         switch (src_type.AsPrimitive().representation()) {
@@ -947,9 +955,15 @@
             __ srliw(dst_reg, dst_reg, 16);
 #endif
             return;
+#if XLEN >= 64
+          case compiler::ffi::kUint32:
+          case compiler::ffi::kInt32:
+            // Note even uint32 is sign-extended to XLEN.
+            __ addiw(dst_reg, src_reg, 0);
+            return;
+#endif
           default:
-            // 32 to 64 bit is covered in IL by Representation conversions.
-            UNIMPLEMENTED();
+            UNREACHABLE();
         }
       }
 
@@ -1002,7 +1016,7 @@
     if (destination.IsRegisters()) {
       const auto& dst = destination.AsRegisters();
       ASSERT(dst.num_regs() == 1);
-      const auto dst_reg = dst.reg_at(0);
+      const auto dst_reg = WithIntermediateMarshalling(dst.reg_at(0));
       ASSERT(!sign_or_zero_extend);
       __ LoadFromOffset(dst_reg, src.base_register(), src.offset_in_bytes(),
                         BytesToOperandSize(dst_size));
@@ -1022,9 +1036,14 @@
         default:
           UNIMPLEMENTED();
       }
-
+    } else if (destination.IsStack()) {
+      const auto& dst = destination.AsStack();
+      // TMP=A3, here not remapped to T3.
+      __ LoadFromOffset(TMP, src.base_register(), src.offset_in_bytes(),
+                        BytesToOperandSize(src_size));
+      __ StoreToOffset(TMP, dst.base_register(), dst.offset_in_bytes(),
+                       BytesToOperandSize(dst_size));
     } else {
-      ASSERT(destination.IsStack());
       UNREACHABLE();
     }
   }
diff --git a/runtime/vm/compiler/backend/il_riscv.cc b/runtime/vm/compiler/backend/il_riscv.cc
index 882a6db..1d0562a 100644
--- a/runtime/vm/compiler/backend/il_riscv.cc
+++ b/runtime/vm/compiler/backend/il_riscv.cc
@@ -7163,7 +7163,53 @@
 }
 
 void BitCastInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  UNIMPLEMENTED();
+  switch (from()) {
+    case kUnboxedFloat: {
+      ASSERT(to() == kUnboxedInt64);
+      const FpuRegister src = locs()->in(0).fpu_reg();
+      const Register dst = locs()->out(0).reg();
+      __ fmvxw(dst, src);
+      break;
+    }
+#if XLEN >= 64
+    case kUnboxedDouble: {
+      ASSERT(to() == kUnboxedInt64);
+      const FpuRegister src = locs()->in(0).fpu_reg();
+      const Register dst = locs()->out(0).reg();
+      __ fmvxd(dst, src);
+      break;
+    }
+#endif
+    case kUnboxedInt64: {
+      const Register src = locs()->in(0).reg();
+      switch (to()) {
+#if XLEN >= 64
+        case kUnboxedDouble: {
+          const FpuRegister dst = locs()->out(0).fpu_reg();
+          __ fmvdx(dst, src);
+          break;
+        }
+#endif
+        case kUnboxedFloat: {
+          const FpuRegister dst = locs()->out(0).fpu_reg();
+          __ fmvwx(dst, src);
+          break;
+        }
+        default:
+          UNREACHABLE();
+      }
+      break;
+    }
+    case kUnboxedInt32: {
+      ASSERT(to() == kUnboxedFloat);
+      const Register src = locs()->in(0).reg();
+      const FpuRegister dst = locs()->out(0).fpu_reg();
+      __ fmvwx(dst, src);
+      break;
+    }
+    default:
+      UNREACHABLE();
+  }
 }
 
 LocationSummary* StopInstr::MakeLocationSummary(Zone* zone, bool opt) const {
diff --git a/runtime/vm/compiler/ffi/native_calling_convention.cc b/runtime/vm/compiler/ffi/native_calling_convention.cc
index e30a518..4ec1199 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention.cc
@@ -112,6 +112,25 @@
           NativeFpuRegistersLocation(payload_type, payload_type, reg);
     }
 
+#if defined(TARGET_ARCH_RISCV64)
+    // After using up F registers, start bitcasting to X registers.
+    if (HasAvailableCpuRegisters(1)) {
+      const Register reg = AllocateCpuRegister();
+      const auto& container_type = *new (zone_) NativePrimitiveType(kInt64);
+      return *new (zone_)
+          NativeRegistersLocation(zone_, payload_type, container_type, reg);
+    }
+#elif defined(TARGET_ARCH_RISCV32)
+    // After using up F registers, start bitcasting to X register pairs.
+    if (HasAvailableCpuRegisters(2)) {
+      const Register reg1 = AllocateCpuRegister();
+      const Register reg2 = AllocateCpuRegister();
+      const auto& container_type = *new (zone_) NativePrimitiveType(kInt64);
+      return *new (zone_) NativeRegistersLocation(zone_, payload_type,
+                                                  container_type, reg1, reg2);
+    }
+#endif
+
     BlockAllFpuRegisters();
     if (CallingConventions::kArgumentIntRegXorFpuReg) {
       ASSERT(cpu_regs_used == CallingConventions::kNumArgRegs);
@@ -365,32 +384,85 @@
 #endif  // defined(TARGET_ARCH_ARM64)
 
 #if defined(TARGET_ARCH_RISCV32) || defined(TARGET_ARCH_RISCV64)
-  // If total size is <= XLEN, passed like an XLEN scalar: use a register if
-  // available or pass by value on the stack.
-  // If total size is <= 2*XLEN, passed like two XLEN scalars: use registers
-  // if available or pass by value on the stack. If only one register is
-  // available, pass the low part by register and the high part on the stack.
-  // Otherwise, passed by reference.
+  // See RISC-V ABIs Specification
+  // https://github.com/riscv-non-isa/riscv-elf-psabi-doc/releases
   const NativeLocation& AllocateCompound(
       const NativeCompoundType& payload_type) {
-    const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
     const auto& compound_type = payload_type.AsCompound();
+
+    // 2.2. Hardware Floating-point Calling Convention.
+    const NativePrimitiveType* first = nullptr;
+    const NativePrimitiveType* second = nullptr;
+    const intptr_t num_primitive_members =
+        compound_type.PrimitivePairMembers(&first, &second);
+
+    // If exactly one floating-point member, pass like a scalar.
+    if ((num_primitive_members == 1) && first->IsFloat()) {
+      NativeLocations& multiple_locations =
+          *new (zone_) NativeLocations(zone_, 1);
+      multiple_locations.Add(&AllocateArgument(*first));
+      return *new (zone_)
+          MultipleNativeLocations(compound_type, multiple_locations);
+    }
+
+    if (num_primitive_members == 2) {
+      if (first->IsFloat() && second->IsFloat()) {
+        // If exactly two floating-point members, pass like two scalars if two F
+        // registers are available.
+        if (HasAvailableFpuRegisters(2)) {
+          NativeLocations& multiple_locations =
+              *new (zone_) NativeLocations(zone_, 2);
+          multiple_locations.Add(&AllocateArgument(*first));
+          multiple_locations.Add(&AllocateArgument(*second));
+          return *new (zone_)
+              MultipleNativeLocations(compound_type, multiple_locations);
+        }
+      } else if (first->IsFloat() || second->IsFloat()) {
+        // If exactly two members, one is integer and one is float in either
+        // order, pass like two scalars if both an X and F register are
+        // available.
+        if (HasAvailableFpuRegisters(1) && HasAvailableCpuRegisters(1)) {
+          NativeLocations& multiple_locations =
+              *new (zone_) NativeLocations(zone_, 2);
+          multiple_locations.Add(&AllocateArgument(*first));
+          multiple_locations.Add(&AllocateArgument(*second));
+          return *new (zone_)
+              MultipleNativeLocations(compound_type, multiple_locations);
+        }
+      }
+    }
+
+    // 2.1. Integer Calling Convention.
+    const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
     const intptr_t size = compound_type.SizeInBytes();
+
+    // If total size is <= XLEN, passed like an XLEN scalar: use a register if
+    // available or pass by value on the stack.
     if (size <= target::kWordSize) {
-      return AllocateArgument(pointer_type);
-    } else if (size <= 2 * target::kWordSize) {
+      NativeLocations& multiple_locations =
+          *new (zone_) NativeLocations(zone_, 1);
+      multiple_locations.Add(&AllocateArgument(pointer_type));
+      return *new (zone_)
+          MultipleNativeLocations(compound_type, multiple_locations);
+    }
+
+    // If total size is <= 2*XLEN, passed like two XLEN scalars: use registers
+    // if available or pass by value on the stack. If only one register is
+    // available, pass the low part by register and the high part on the
+    // stack.
+    if (size <= 2 * target::kWordSize) {
       NativeLocations& multiple_locations =
           *new (zone_) NativeLocations(zone_, 2);
       multiple_locations.Add(&AllocateArgument(pointer_type));
       multiple_locations.Add(&AllocateArgument(pointer_type));
       return *new (zone_)
           MultipleNativeLocations(compound_type, multiple_locations);
-    } else {
-      const auto& pointer_type = *new (zone_) NativePrimitiveType(kFfiIntPtr);
-      const auto& pointer_location = AllocateArgument(pointer_type);
-      return *new (zone_)
-          PointerToMemoryLocation(pointer_location, compound_type);
     }
+
+    // Otherwise, passed by reference.
+    const auto& pointer_location = AllocateArgument(pointer_type);
+    return *new (zone_)
+        PointerToMemoryLocation(pointer_location, compound_type);
   }
 #endif
 
@@ -435,7 +507,7 @@
     stack_height_in_bytes = Utils::RoundUp(stack_height_in_bytes, alignment);
   }
 
-  int NumFpuRegisters(FpuRegisterKind kind) {
+  static int NumFpuRegisters(FpuRegisterKind kind) {
 #if defined(TARGET_ARCH_ARM)
     if (SoftFpAbi()) return 0;
     if (kind == kSingleFpuReg) return CallingConventions::kNumSFpuArgRegs;
@@ -446,7 +518,7 @@
   }
 
   // If no register is free, returns -1.
-  int FirstFreeFpuRegisterIndex(FpuRegisterKind kind, int amount = 1) {
+  int FirstFreeFpuRegisterIndex(FpuRegisterKind kind, int amount = 1) const {
     const intptr_t size = SizeFromFpuRegisterKind(kind) / 4;
     ASSERT(size == 1 || size == 2 || size == 4);
     if (fpu_reg_parts_used == -1) return kNoFpuRegister;
@@ -489,6 +561,13 @@
     fpu_reg_parts_used = -1;
   }
 
+  bool HasAvailableCpuRegisters(intptr_t count) const {
+    return cpu_regs_used + count <= CallingConventions::kNumArgRegs;
+  }
+  bool HasAvailableFpuRegisters(intptr_t count) const {
+    return FirstFreeFpuRegisterIndex(kQuadFpuReg, count) != kNoFpuRegister;
+  }
+
   intptr_t cpu_regs_used = 0;
   // Every bit denotes 32 bits of FPU registers.
   intptr_t fpu_reg_parts_used = 0;
diff --git a/runtime/vm/compiler/ffi/native_calling_convention_test.cc b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
index dc0d522..a8ebd99 100644
--- a/runtime/vm/compiler/ffi/native_calling_convention_test.cc
+++ b/runtime/vm/compiler/ffi/native_calling_convention_test.cc
@@ -11,9 +11,6 @@
 namespace compiler {
 namespace ffi {
 
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 const NativeCallingConvention& RunSignatureTest(
     dart::Zone* zone,
     const char* name,
@@ -68,10 +65,20 @@
   RunSignatureTest(Z, "int8x10", arguments, int8type);
 }
 
-UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_floatx10) {
+UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_floatx20) {
   const auto& floatType = *new (Z) NativePrimitiveType(kFloat);
 
-  auto& arguments = *new (Z) NativeTypes(Z, 10);
+  auto& arguments = *new (Z) NativeTypes(Z, 20);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
+  arguments.Add(&floatType);
   arguments.Add(&floatType);
   arguments.Add(&floatType);
   arguments.Add(&floatType);
@@ -83,7 +90,35 @@
   arguments.Add(&floatType);
   arguments.Add(&floatType);
 
-  RunSignatureTest(Z, "floatx10", arguments, floatType);
+  RunSignatureTest(Z, "floatx20", arguments, floatType);
+}
+
+UNIT_TEST_CASE_WITH_ZONE(NativeCallingConvention_doublex20) {
+  const auto& doubleType = *new (Z) NativePrimitiveType(kDouble);
+
+  auto& arguments = *new (Z) NativeTypes(Z, 20);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+  arguments.Add(&doubleType);
+
+  RunSignatureTest(Z, "doublex20", arguments, doubleType);
 }
 
 // Test with 3-byte struct.
@@ -628,8 +663,6 @@
   RunSignatureTest(Z, "struct12bytesFloatx6", arguments, int64_type);
 }
 
-#endif  // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_location_test.cc b/runtime/vm/compiler/ffi/native_location_test.cc
index 8eecc54..8ba10d9 100644
--- a/runtime/vm/compiler/ffi/native_location_test.cc
+++ b/runtime/vm/compiler/ffi/native_location_test.cc
@@ -10,9 +10,6 @@
 namespace compiler {
 namespace ffi {
 
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 UNIT_TEST_CASE_WITH_ZONE(NativeStackLocation) {
   const auto& native_type = *new (Z) NativePrimitiveType(kInt8);
 
@@ -38,8 +35,6 @@
   EXPECT_EQ(4, half_1.offset_in_bytes());
 }
 
-#endif  // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_type.cc b/runtime/vm/compiler/ffi/native_type.cc
index 8902c9b..6838082 100644
--- a/runtime/vm/compiler/ffi/native_type.cc
+++ b/runtime/vm/compiler/ffi/native_type.cc
@@ -766,6 +766,37 @@
   UNREACHABLE();
 }
 
+intptr_t NativePrimitiveType::PrimitivePairMembers(
+    const NativePrimitiveType** first,
+    const NativePrimitiveType** second,
+    intptr_t offset_in_members) const {
+  if (offset_in_members == 0) *first = this;
+  if (offset_in_members == 1) *second = this;
+  return offset_in_members + 1;
+}
+
+intptr_t NativeArrayType::PrimitivePairMembers(
+    const NativePrimitiveType** first,
+    const NativePrimitiveType** second,
+    intptr_t offset_in_members) const {
+  for (intptr_t i = 0; i < length_; i++) {
+    offset_in_members =
+        element_type_.PrimitivePairMembers(first, second, offset_in_members);
+  }
+  return offset_in_members;
+}
+
+intptr_t NativeCompoundType::PrimitivePairMembers(
+    const NativePrimitiveType** first,
+    const NativePrimitiveType** second,
+    intptr_t offset_in_members) const {
+  for (intptr_t i = 0; i < members().length(); i++) {
+    offset_in_members =
+        members_[i]->PrimitivePairMembers(first, second, offset_in_members);
+  }
+  return offset_in_members;
+}
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
 bool NativePrimitiveType::ContainsOnlyFloats(Range range) const {
   const auto this_range = Range::StartAndEnd(0, SizeInBytes());
diff --git a/runtime/vm/compiler/ffi/native_type.h b/runtime/vm/compiler/ffi/native_type.h
index f60fea6..a3a03bd 100644
--- a/runtime/vm/compiler/ffi/native_type.h
+++ b/runtime/vm/compiler/ffi/native_type.h
@@ -138,6 +138,13 @@
   virtual intptr_t NumPrimitiveMembersRecursive() const = 0;
   virtual const NativePrimitiveType& FirstPrimitiveMember() const = 0;
 
+  // Returns the number of primitive members when this aggregrate is flattened
+  // out, and sets the out-parameters to the first two such primitive members.
+  virtual intptr_t PrimitivePairMembers(
+      const NativePrimitiveType** first,
+      const NativePrimitiveType** second,
+      intptr_t offset_in_members = 0) const = 0;
+
   virtual ~NativeType() {}
 
  protected:
@@ -206,6 +213,9 @@
 
   virtual intptr_t NumPrimitiveMembersRecursive() const;
   virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+  virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+                                        const NativePrimitiveType** second,
+                                        intptr_t offset_in_members = 0) const;
 
   virtual ~NativePrimitiveType() {}
 
@@ -251,6 +261,9 @@
 
   virtual intptr_t NumPrimitiveMembersRecursive() const;
   virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+  virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+                                        const NativePrimitiveType** second,
+                                        intptr_t offset_in_members = 0) const;
 
  private:
   const NativeType& element_type_;
@@ -300,6 +313,9 @@
 
   virtual intptr_t NumPrimitiveMembersRecursive() const = 0;
   virtual const NativePrimitiveType& FirstPrimitiveMember() const;
+  virtual intptr_t PrimitivePairMembers(const NativePrimitiveType** first,
+                                        const NativePrimitiveType** second,
+                                        intptr_t offset_in_members = 0) const;
 
  protected:
   NativeCompoundType(const NativeTypes& members,
diff --git a/runtime/vm/compiler/ffi/native_type_test.cc b/runtime/vm/compiler/ffi/native_type_test.cc
index aa3b00c..d132b91 100644
--- a/runtime/vm/compiler/ffi/native_type_test.cc
+++ b/runtime/vm/compiler/ffi/native_type_test.cc
@@ -12,9 +12,6 @@
 namespace compiler {
 namespace ffi {
 
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 const NativeCompoundType& RunStructTest(dart::Zone* zone,
                                         const char* name,
                                         const NativeTypes& member_types,
@@ -342,8 +339,6 @@
   EXPECT(union_type.ContainsUnalignedMembers());
 }
 
-#endif  // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/native_type_vm_test.cc b/runtime/vm/compiler/ffi/native_type_vm_test.cc
index 28e2b42..50a1e07 100644
--- a/runtime/vm/compiler/ffi/native_type_vm_test.cc
+++ b/runtime/vm/compiler/ffi/native_type_vm_test.cc
@@ -11,9 +11,6 @@
 namespace compiler {
 namespace ffi {
 
-// TODO(https://github.com/dart-lang/sdk/issues/48164)
-#if !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 ISOLATE_UNIT_TEST_CASE(Ffi_NativeType_Primitive_FromAbstractType) {
   Zone* Z = thread->zone();
 
@@ -89,8 +86,6 @@
             native_type.members()[1]->SizeInBytes());
 }
 
-#endif  // !defined(TARGET_ARCH_RISCV32) && !defined(TARGET_ARCH_RISCV64)
-
 }  // namespace ffi
 }  // namespace compiler
 }  // namespace dart
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_android.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_ios.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_linux.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect
new file mode 100644
index 0000000..3b73df0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm64_macos.expect
@@ -0,0 +1,22 @@
+v0 double
+v1 double
+v2 double
+v3 double
+v4 double
+v5 double
+v6 double
+v7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+v0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect
new file mode 100644
index 0000000..1855bc1
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_android.expect
@@ -0,0 +1,22 @@
+(r0, r1) int64[double]
+(r2, r3) int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+=>
+(r0, r1) int64[double]
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect
new file mode 100644
index 0000000..9f87499
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_ios.expect
@@ -0,0 +1,22 @@
+d0 double
+d1 double
+d2 double
+d3 double
+d4 double
+d5 double
+d6 double
+d7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+q0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect
new file mode 100644
index 0000000..9f87499
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/arm_linux.expect
@@ -0,0 +1,22 @@
+d0 double
+d1 double
+d2 double
+d3 double
+d4 double
+d5 double
+d6 double
+d7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+q0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_android.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_linux.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect
new file mode 100644
index 0000000..b7eb3ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/ia32_win.expect
@@ -0,0 +1,22 @@
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+S+128 double
+S+136 double
+S+144 double
+S+152 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect
new file mode 100644
index 0000000..f5fde9e
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv32_linux.expect
@@ -0,0 +1,22 @@
+fa0 double
+fa1 double
+fa2 double
+fa3 double
+fa4 double
+fa5 double
+fa6 double
+fa7 double
+(a0, a1) int64[double]
+(a2, tmp) int64[double]
+(tmp2, pp) int64[double]
+(a6, a7) int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect
new file mode 100644
index 0000000..810b278
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/riscv64_linux.expect
@@ -0,0 +1,22 @@
+fa0 double
+fa1 double
+fa2 double
+fa3 double
+fa4 double
+fa5 double
+fa6 double
+fa7 double
+a0 int64[double]
+a1 int64[double]
+a2 int64[double]
+tmp int64[double]
+tmp2 int64[double]
+pp int64[double]
+a6 int64[double]
+a7 int64[double]
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_ios.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_linux.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect
new file mode 100644
index 0000000..e2792c6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_macos.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+xmm4 double
+xmm5 double
+xmm6 double
+xmm7 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect
new file mode 100644
index 0000000..055bacc
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/doublex20/x64_win.expect
@@ -0,0 +1,22 @@
+xmm0 double
+xmm1 double
+xmm2 double
+xmm3 double
+S+0 double
+S+8 double
+S+16 double
+S+24 double
+S+32 double
+S+40 double
+S+48 double
+S+56 double
+S+64 double
+S+72 double
+S+80 double
+S+88 double
+S+96 double
+S+104 double
+S+112 double
+S+120 double
+=>
+xmm0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect
deleted file mode 100644
index 8f237e3..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+8 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect
deleted file mode 100644
index 0a25996..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+4 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect
deleted file mode 100644
index 8f237e3..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+8 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
deleted file mode 100644
index 0a25996..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm64_macos.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-v0 float
-v1 float
-v2 float
-v3 float
-v4 float
-v5 float
-v6 float
-v7 float
-S+0 float
-S+4 float
-=>
-v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect
deleted file mode 100644
index f563dbd..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-r0 int32[float]
-r1 int32[float]
-r2 int32[float]
-r3 int32[float]
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-=>
-r0 int32[float]
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect
deleted file mode 100644
index 9ff44a7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-s0 float
-s1 float
-s2 float
-s3 float
-s4 float
-s5 float
-s6 float
-s7 float
-s8 float
-s9 float
-=>
-q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect
deleted file mode 100644
index 9ff44a7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/arm_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-s0 float
-s1 float
-s2 float
-s3 float
-s4 float
-s5 float
-s6 float
-s7 float
-s8 float
-s9 float
-=>
-q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_android.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect
deleted file mode 100644
index c4390e7..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/ia32_win.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-S+0 float
-S+4 float
-S+8 float
-S+12 float
-S+16 float
-S+20 float
-S+24 float
-S+28 float
-S+32 float
-S+36 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_ios.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_linux.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect
deleted file mode 100644
index b650130..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_macos.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-xmm4 float
-xmm5 float
-xmm6 float
-xmm7 float
-S+0 float
-S+8 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect
deleted file mode 100644
index 1244587..0000000
--- a/runtime/vm/compiler/ffi/unit_tests/floatx10/x64_win.expect
+++ /dev/null
@@ -1,12 +0,0 @@
-xmm0 float
-xmm1 float
-xmm2 float
-xmm3 float
-S+0 float
-S+8 float
-S+16 float
-S+24 float
-S+32 float
-S+40 float
-=>
-xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect
new file mode 100644
index 0000000..7964f7b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_android.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect
new file mode 100644
index 0000000..b65ab29
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_ios.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect
new file mode 100644
index 0000000..7964f7b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_linux.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect
new file mode 100644
index 0000000..b65ab29
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm64_macos.expect
@@ -0,0 +1,22 @@
+v0 float
+v1 float
+v2 float
+v3 float
+v4 float
+v5 float
+v6 float
+v7 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+=>
+v0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect
new file mode 100644
index 0000000..dfc7b270
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_android.expect
@@ -0,0 +1,22 @@
+r0 int32[float]
+r1 int32[float]
+r2 int32[float]
+r3 int32[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+=>
+r0 int32[float]
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect
new file mode 100644
index 0000000..f1315e6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_ios.expect
@@ -0,0 +1,22 @@
+s0 float
+s1 float
+s2 float
+s3 float
+s4 float
+s5 float
+s6 float
+s7 float
+s8 float
+s9 float
+s10 float
+s11 float
+s12 float
+s13 float
+s14 float
+s15 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect
new file mode 100644
index 0000000..f1315e6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/arm_linux.expect
@@ -0,0 +1,22 @@
+s0 float
+s1 float
+s2 float
+s3 float
+s4 float
+s5 float
+s6 float
+s7 float
+s8 float
+s9 float
+s10 float
+s11 float
+s12 float
+s13 float
+s14 float
+s15 float
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+q0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_android.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_linux.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect
new file mode 100644
index 0000000..b337e24
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/ia32_win.expect
@@ -0,0 +1,22 @@
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+S+32 float
+S+36 float
+S+40 float
+S+44 float
+S+48 float
+S+52 float
+S+56 float
+S+60 float
+S+64 float
+S+68 float
+S+72 float
+S+76 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect
new file mode 100644
index 0000000..663376f
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv32_linux.expect
@@ -0,0 +1,22 @@
+fa0 float
+fa1 float
+fa2 float
+fa3 float
+fa4 float
+fa5 float
+fa6 float
+fa7 float
+(a0, a1) int64[float]
+(a2, tmp) int64[float]
+(tmp2, pp) int64[float]
+(a6, a7) int64[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+S+16 float
+S+20 float
+S+24 float
+S+28 float
+=>
+fa0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
new file mode 100644
index 0000000..4531dae
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/riscv64_linux.expect
@@ -0,0 +1,22 @@
+fa0 float
+fa1 float
+fa2 float
+fa3 float
+fa4 float
+fa5 float
+fa6 float
+fa7 float
+a0 int64[float]
+a1 int64[float]
+a2 int64[float]
+tmp int64[float]
+tmp2 int64[float]
+pp int64[float]
+a6 int64[float]
+a7 int64[float]
+S+0 float
+S+4 float
+S+8 float
+S+12 float
+=>
+fa0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_ios.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_linux.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect
new file mode 100644
index 0000000..463908b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_macos.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+xmm4 float
+xmm5 float
+xmm6 float
+xmm7 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect
new file mode 100644
index 0000000..539d8cd
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/floatx20/x64_win.expect
@@ -0,0 +1,22 @@
+xmm0 float
+xmm1 float
+xmm2 float
+xmm3 float
+S+0 float
+S+8 float
+S+16 float
+S+24 float
+S+32 float
+S+40 float
+S+48 float
+S+56 float
+S+64 float
+S+72 float
+S+80 float
+S+88 float
+S+96 float
+S+104 float
+S+112 float
+S+120 float
+=>
+xmm0 float
diff --git a/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect
new file mode 100644
index 0000000..84bc85d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+a0 int32[int8]
+a1 int32[int8]
+a2 int32[int8]
+tmp int32[int8]
+tmp2 int32[int8]
+pp int32[int8]
+a6 int32[int8]
+a7 int32[int8]
+S+0 int8
+S+1 int8
+=>
+a0 int32[int8]
diff --git a/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect
new file mode 100644
index 0000000..84bc85d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/int8x10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+a0 int32[int8]
+a1 int32[int8]
+a2 int32[int8]
+tmp int32[int8]
+tmp2 int32[int8]
+pp int32[int8]
+a6 int32[int8]
+a7 int32[int8]
+S+0 int8
+S+1 int8
+=>
+a0 int32[int8]
diff --git a/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect
new file mode 100644
index 0000000..cc334b3
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv32_linux.expect
@@ -0,0 +1,3 @@
+
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect
new file mode 100644
index 0000000..ea09b9b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/regress46127/riscv64_linux.expect
@@ -0,0 +1,3 @@
+
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect
new file mode 100644
index 0000000..3fb5790
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv32_linux.expect
@@ -0,0 +1,4 @@
+P(a1 uint32) Struct(size: 128)
+a2 int32
+=>
+P(a0 uint32) Struct(size: 128)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect
new file mode 100644
index 0000000..ba868b6
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct128bytesx1/riscv64_linux.expect
@@ -0,0 +1,4 @@
+P(a1 int64) Struct(size: 128)
+a2 int32
+=>
+P(a0 int64) Struct(size: 128)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect
new file mode 100644
index 0000000..fda1302
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv32_linux.expect
@@ -0,0 +1,8 @@
+P(a0 uint32) Struct(size: 12)
+P(a1 uint32) Struct(size: 12)
+P(a2 uint32) Struct(size: 12)
+P(tmp uint32) Struct(size: 12)
+P(tmp2 uint32) Struct(size: 12)
+P(pp uint32) Struct(size: 12)
+=>
+(a0, a1) int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect
new file mode 100644
index 0000000..ad37cf7
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct12bytesFloatx6/riscv64_linux.expect
@@ -0,0 +1,8 @@
+M(a0 int64, a1 int64) Struct(size: 12)
+M(a2 int64, tmp int64) Struct(size: 12)
+M(tmp2 int64, pp int64) Struct(size: 12)
+M(a6 int64, a7 int64) Struct(size: 12)
+M(S+0 int64, S+8 int64) Struct(size: 12)
+M(S+16 int64, S+24 int64) Struct(size: 12)
+=>
+a0 int64
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect
new file mode 100644
index 0000000..664653c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv32_linux.expect
@@ -0,0 +1,15 @@
+P(a1 uint32) Struct(size: 16)
+fa0 float
+P(a2 uint32) Struct(size: 16)
+P(tmp uint32) Struct(size: 16)
+P(tmp2 uint32) Struct(size: 16)
+P(pp uint32) Struct(size: 16)
+P(a6 uint32) Struct(size: 16)
+P(a7 uint32) Struct(size: 16)
+P(S+0 uint32) Struct(size: 16)
+P(S+4 uint32) Struct(size: 16)
+fa1 float
+S+8 int8
+P(S+12 uint32) Struct(size: 16)
+=>
+P(a0 uint32) Struct(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect
new file mode 100644
index 0000000..6f7ef5b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct16bytesHomogenousx10/riscv64_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int64, a1 int64) Struct(size: 16)
+fa0 float
+M(a2 int64, tmp int64) Struct(size: 16)
+M(tmp2 int64, pp int64) Struct(size: 16)
+M(a6 int64, a7 int64) Struct(size: 16)
+M(S+0 int64, S+8 int64) Struct(size: 16)
+M(S+16 int64, S+24 int64) Struct(size: 16)
+M(S+32 int64, S+40 int64) Struct(size: 16)
+M(S+48 int64, S+56 int64) Struct(size: 16)
+M(S+64 int64, S+72 int64) Struct(size: 16)
+fa1 float
+S+80 int8
+M(S+88 int64, S+96 int64) Struct(size: 16)
+=>
+M(a0 int64, a1 int64) Struct(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect
new file mode 100644
index 0000000..d326d70
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32) Struct(size: 3)
+M(a1 uint32) Struct(size: 3)
+M(a2 uint32) Struct(size: 3)
+M(tmp uint32) Struct(size: 3)
+M(tmp2 uint32) Struct(size: 3)
+M(pp uint32) Struct(size: 3)
+M(a6 uint32) Struct(size: 3)
+M(a7 uint32) Struct(size: 3)
+M(S+0 uint32) Struct(size: 3)
+M(S+4 uint32) Struct(size: 3)
+=>
+M(a0 uint32) Struct(size: 3)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect
new file mode 100644
index 0000000..3f71e45
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct3bytesx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Struct(size: 3)
+M(a1 int64) Struct(size: 3)
+M(a2 int64) Struct(size: 3)
+M(tmp int64) Struct(size: 3)
+M(tmp2 int64) Struct(size: 3)
+M(pp int64) Struct(size: 3)
+M(a6 int64) Struct(size: 3)
+M(a7 int64) Struct(size: 3)
+M(S+0 int64) Struct(size: 3)
+M(S+8 int64) Struct(size: 3)
+=>
+M(a0 int64) Struct(size: 3)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect
new file mode 100644
index 0000000..8c5778d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32, a1 uint32) Struct(size: 8)
+M(a2 uint32, tmp uint32) Struct(size: 8)
+M(tmp2 uint32, pp uint32) Struct(size: 8)
+M(a6 uint32, a7 uint32) Struct(size: 8)
+M(S+0 uint32, S+4 uint32) Struct(size: 8)
+M(S+8 uint32, S+12 uint32) Struct(size: 8)
+M(S+16 uint32, S+20 uint32) Struct(size: 8)
+M(S+24 uint32, S+28 uint32) Struct(size: 8)
+M(S+32 uint32, S+36 uint32) Struct(size: 8)
+M(S+40 uint32, S+44 uint32) Struct(size: 8)
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect
new file mode 100644
index 0000000..7bd998e
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesPackedx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Struct(size: 8)
+M(a1 int64) Struct(size: 8)
+M(a2 int64) Struct(size: 8)
+M(tmp int64) Struct(size: 8)
+M(tmp2 int64) Struct(size: 8)
+M(pp int64) Struct(size: 8)
+M(a6 int64) Struct(size: 8)
+M(a7 int64) Struct(size: 8)
+M(S+0 int64) Struct(size: 8)
+M(S+8 int64) Struct(size: 8)
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect
new file mode 100644
index 0000000..648d83b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv32_linux.expect
@@ -0,0 +1,3 @@
+M(a0 uint32, a1 uint32) Struct(size: 8)
+=>
+M(a0 uint32, a1 uint32) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect
new file mode 100644
index 0000000..f1b1ff8
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct8bytesx1/riscv64_linux.expect
@@ -0,0 +1,3 @@
+M(a0 int64) Struct(size: 8)
+=>
+M(a0 int64) Struct(size: 8)
diff --git a/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect
new file mode 100644
index 0000000..da14e5c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv32_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int32[int8], fa0 double) Struct(size: 9)
+M(a1 int32[int8], fa1 double) Struct(size: 9)
+M(a2 int32[int8], fa2 double) Struct(size: 9)
+M(tmp int32[int8], fa3 double) Struct(size: 9)
+M(tmp2 int32[int8], fa4 double) Struct(size: 9)
+M(pp int32[int8], fa5 double) Struct(size: 9)
+M(a6 int32[int8], fa6 double) Struct(size: 9)
+M(a7 int32[int8], fa7 double) Struct(size: 9)
+P(S+0 uint32) Struct(size: 9)
+P(S+4 uint32) Struct(size: 9)
+S+8 double
+S+16 int32
+S+20 int32
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
new file mode 100644
index 0000000..d4389d5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/structPacked/riscv64_linux.expect
@@ -0,0 +1,15 @@
+M(a0 int32[int8], fa0 double) Struct(size: 9)
+M(a1 int32[int8], fa1 double) Struct(size: 9)
+M(a2 int32[int8], fa2 double) Struct(size: 9)
+M(tmp int32[int8], fa3 double) Struct(size: 9)
+M(tmp2 int32[int8], fa4 double) Struct(size: 9)
+M(pp int32[int8], fa5 double) Struct(size: 9)
+M(a6 int32[int8], fa6 double) Struct(size: 9)
+M(a7 int32[int8], fa7 double) Struct(size: 9)
+M(S+0 int64, S+8 int64) Struct(size: 9)
+M(S+16 int64, S+24 int64) Struct(size: 9)
+S+32 double
+S+40 int32
+S+44 int32
+=>
+fa0 double
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect
new file mode 100644
index 0000000..e8eafe5
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv32_linux.expect
@@ -0,0 +1,17 @@
+Struct(size: 72, field alignment: 8, stack alignment: 8, members: {
+  0: int8,
+  2: int16,
+  4: int32,
+  8: int64,
+  16: uint8,
+  18: uint16,
+  20: uint32,
+  24: uint64,
+  32: int32,
+  40: double,
+  48: float,
+  52: int32,
+  56: int32,
+  60: int32,
+  64: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect
new file mode 100644
index 0000000..59f05bb1
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_VeryLargeStruct/riscv64_linux.expect
@@ -0,0 +1,17 @@
+Struct(size: 88, field alignment: 8, stack alignment: 8, members: {
+  0: int8,
+  2: int16,
+  4: int32,
+  8: int64,
+  16: uint8,
+  18: uint16,
+  20: uint32,
+  24: uint64,
+  32: int64,
+  40: double,
+  48: float,
+  56: int64,
+  64: int64,
+  72: int64,
+  80: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect
new file mode 100644
index 0000000..21f9c56
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv32_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+  0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 4, members: {0: Array(element type: float, length: 2)}), length: 2)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect
new file mode 100644
index 0000000..21f9c56
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatarray/riscv64_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+  0: Array(element type: Struct(size: 8, field alignment: 4, stack alignment: 4, members: {0: Array(element type: float, length: 2)}), length: 2)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect
new file mode 100644
index 0000000..a753409
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv32_linux.expect
@@ -0,0 +1,6 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+  0: float,
+  4: float,
+  8: float,
+  12: float
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect
new file mode 100644
index 0000000..a753409
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_floatx4/riscv64_linux.expect
@@ -0,0 +1,6 @@
+Struct(size: 16, field alignment: 4, stack alignment: 4, members: {
+  0: float,
+  4: float,
+  8: float,
+  12: float
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect
new file mode 100644
index 0000000..b2249b0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv32_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 8, field alignment: 1, stack alignment: 1, members: {
+  0: Array(element type: int8, length: 8)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect
new file mode 100644
index 0000000..b2249b0
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8array/riscv64_linux.expect
@@ -0,0 +1,3 @@
+Struct(size: 8, field alignment: 1, stack alignment: 1, members: {
+  0: Array(element type: int8, length: 8)
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect
new file mode 100644
index 0000000..cba532d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+Struct(size: 10, field alignment: 1, stack alignment: 1, members: {
+  0: int8,
+  1: int8,
+  2: int8,
+  3: int8,
+  4: int8,
+  5: int8,
+  6: int8,
+  7: int8,
+  8: int8,
+  9: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect
new file mode 100644
index 0000000..cba532d
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/struct_int8x10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+Struct(size: 10, field alignment: 1, stack alignment: 1, members: {
+  0: int8,
+  1: int8,
+  2: int8,
+  3: int8,
+  4: int8,
+  5: int8,
+  6: int8,
+  7: int8,
+  8: int8,
+  9: int8
+})
diff --git a/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect
new file mode 100644
index 0000000..7a6a9ef
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv32_linux.expect
@@ -0,0 +1,13 @@
+P(a1 uint32) Union(size: 16)
+P(a2 uint32) Union(size: 16)
+P(tmp uint32) Union(size: 16)
+P(tmp2 uint32) Union(size: 16)
+P(pp uint32) Union(size: 16)
+P(a6 uint32) Union(size: 16)
+P(a7 uint32) Union(size: 16)
+P(S+0 uint32) Union(size: 16)
+P(S+4 uint32) Union(size: 16)
+S+8 int8
+P(S+12 uint32) Union(size: 16)
+=>
+P(a0 uint32) Union(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect
new file mode 100644
index 0000000..35d836b
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union16bytesHomogenousx10/riscv64_linux.expect
@@ -0,0 +1,13 @@
+M(a0 int64, a1 int64) Union(size: 16)
+M(a2 int64, tmp int64) Union(size: 16)
+M(tmp2 int64, pp int64) Union(size: 16)
+M(a6 int64, a7 int64) Union(size: 16)
+M(S+0 int64, S+8 int64) Union(size: 16)
+M(S+16 int64, S+24 int64) Union(size: 16)
+M(S+32 int64, S+40 int64) Union(size: 16)
+M(S+48 int64, S+56 int64) Union(size: 16)
+M(S+64 int64, S+72 int64) Union(size: 16)
+S+80 int8
+M(S+88 int64, S+96 int64) Union(size: 16)
+=>
+M(a0 int64, a1 int64) Union(size: 16)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect
new file mode 100644
index 0000000..95a498c
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv32_linux.expect
@@ -0,0 +1,12 @@
+M(a0 uint32, a1 uint32) Union(size: 5)
+M(a2 uint32, tmp uint32) Union(size: 5)
+M(tmp2 uint32, pp uint32) Union(size: 5)
+M(a6 uint32, a7 uint32) Union(size: 5)
+M(S+0 uint32, S+4 uint32) Union(size: 5)
+M(S+8 uint32, S+12 uint32) Union(size: 5)
+M(S+16 uint32, S+20 uint32) Union(size: 5)
+M(S+24 uint32, S+28 uint32) Union(size: 5)
+M(S+32 uint32, S+36 uint32) Union(size: 5)
+M(S+40 uint32, S+44 uint32) Union(size: 5)
+=>
+M(a0 uint32, a1 uint32) Union(size: 5)
diff --git a/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect
new file mode 100644
index 0000000..9165726
--- /dev/null
+++ b/runtime/vm/compiler/ffi/unit_tests/union5bytesPackedx10/riscv64_linux.expect
@@ -0,0 +1,12 @@
+M(a0 int64) Union(size: 5)
+M(a1 int64) Union(size: 5)
+M(a2 int64) Union(size: 5)
+M(tmp int64) Union(size: 5)
+M(tmp2 int64) Union(size: 5)
+M(pp int64) Union(size: 5)
+M(a6 int64) Union(size: 5)
+M(a7 int64) Union(size: 5)
+M(S+0 int64) Union(size: 5)
+M(S+8 int64) Union(size: 5)
+=>
+M(a0 int64) Union(size: 5)
diff --git a/sdk/lib/core/enum.dart b/sdk/lib/core/enum.dart
index 5d8f800..df63ab1 100644
--- a/sdk/lib/core/enum.dart
+++ b/sdk/lib/core/enum.dart
@@ -52,6 +52,22 @@
   /// orders enum values by their [index] value, which corresponds
   /// to the source order of the enum element declarations in
   /// the `enum` declaration.
+  ///
+  /// Example:
+  /// ```dart
+  /// enum Season { spring, summer, autumn, winter }
+  ///
+  /// void main() {
+  ///   var relationByIndex =
+  ///       Enum.compareByIndex(Season.spring, Season.summer); // < 0
+  ///   relationByIndex =
+  ///       Enum.compareByIndex(Season.summer, Season.spring); // > 0
+  ///   relationByIndex =
+  ///       Enum.compareByIndex(Season.spring, Season.winter); // < 0
+  ///   relationByIndex =
+  ///       Enum.compareByIndex(Season.winter, Season.spring); // > 0
+  /// }
+  /// ```
   @Since("2.15")
   static int compareByIndex<T extends Enum>(T value1, T value2) =>
       value1.index - value2.index;
@@ -64,6 +80,17 @@
   /// This [Comparator] compares two enum values by comparing their names,
   /// and can be used to sort enum values by their names.
   /// The comparison uses [String.compareTo], and is therefore case sensitive.
+  ///
+  /// Example:
+  /// ```dart
+  /// enum Season { spring, summer, autumn, winter }
+  ///
+  /// void main() {
+  ///   var seasons = [...Season.values]..sort(Enum.compareByName);
+  ///   print(seasons);
+  ///   // [Season.autumn, Season.spring, Season.summer, Season.winter]
+  /// }
+  /// ```
   @Since("2.15")
   static int compareByName<T extends Enum>(T value1, T value2) =>
       value1.name.compareTo(value2.name);
diff --git a/tools/VERSION b/tools/VERSION
index 00d1d49..867df85 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 93
+PRERELEASE 94
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/flutter/analyze_flutter_plugins.sh b/tools/bots/flutter/analyze_flutter_plugins.sh
index 3616faa..70b8eec 100755
--- a/tools/bots/flutter/analyze_flutter_plugins.sh
+++ b/tools/bots/flutter/analyze_flutter_plugins.sh
@@ -11,7 +11,6 @@
 checkout=$(pwd)
 export PATH=$checkout/out/ReleaseX64/dart-sdk/bin:$PATH
 dart=$checkout/out/ReleaseX64/dart-sdk/bin/dart
-pub=$checkout/out/ReleaseX64/dart-sdk/bin/pub
 sdk=$checkout/out/ReleaseX64/dart-sdk
 tmpdir=$(mktemp -d)
 
diff --git a/tools/bots/pub_integration_test.py b/tools/bots/pub_integration_test.py
index f80c554..4f35ae6 100755
--- a/tools/bots/pub_integration_test.py
+++ b/tools/bots/pub_integration_test.py
@@ -35,10 +35,10 @@
     mode = ('Debug' if options.mode == 'debug' else 'Release')
 
     out_dir = 'xcodebuild' if sys.platform == 'darwin' else 'out'
-    extension = '' if not sys.platform == 'win32' else '.bat'
-    pub = os.path.abspath('%s/%s%s/dart-sdk/bin/pub%s' %
-                          (out_dir, mode, arch, extension))
-    print(pub)
+    extension = '' if not sys.platform == 'win32' else '.exe'
+    dart = os.path.abspath('%s/%s%s/dart-sdk/bin/dart%s' %
+                           (out_dir, mode, arch, extension))
+    print(dart)
 
     working_dir = tempfile.mkdtemp()
     try:
@@ -49,11 +49,15 @@
         with open(working_dir + '/pubspec.yaml', 'w') as pubspec_yaml:
             pubspec_yaml.write(PUBSPEC)
 
-        exit_code = subprocess.call([pub, 'get'], cwd=working_dir, env=env)
+        exit_code = subprocess.call([dart, 'pub', 'get'],
+                                    cwd=working_dir,
+                                    env=env)
         if exit_code != 0:
             return exit_code
 
-        exit_code = subprocess.call([pub, 'upgrade'], cwd=working_dir, env=env)
+        exit_code = subprocess.call([dart, 'pub', 'upgrade'],
+                                    cwd=working_dir,
+                                    env=env)
         if exit_code != 0:
             return exit_code
     finally: