diff --git a/CHANGELOG.md b/CHANGELOG.md
index d045819..0a97fcd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -158,7 +158,14 @@
 * The `--server` option to `dart pub publish` and `dart pub uploader` have been
   deprecated. Use `publish_to` in your `pubspec.yaml` or set the
   `$PUB_HOSTED_URL` environment variable.
+* `pub global activate no longer re-precompiles if current global installed was
+   same version.
+* The Flutter SDK constraint upper bound is now ignored in pubspecs and
+  deprecated when publishing.
 
+  See: [flutter-upper-bound-deprecation][].
+
+[flutter-upper-bound-deprecation]: https://dart.dev/go/flutter-upper-bound-deprecation
 [#44072]: https://github.com/dart-lang/sdk/issues/44072
 [dart tool]: https://dart.dev/tools/dart-tool
 
diff --git a/DEPS b/DEPS
index 5b388d3..b61db7e 100644
--- a/DEPS
+++ b/DEPS
@@ -133,7 +133,7 @@
   "ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
   "protobuf_rev": "0d03fd588df69e9863e2a2efc0059dee8f18d5b2",
-  "pub_rev": "8ea96121dbb3f762f63e641d49141927dc30aac1",
+  "pub_rev": "392a3cb455af48f7ce8807a96174691945f97f0a",
   "pub_semver_rev": "10569a1e867e909cf5db201f73118020453e5db8",
   "resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
   "root_certificates_rev": "7e5ec82c99677a2e5b95ce296c4d68b0d3378ed8",
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index bbad224..49c87e2 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -419,12 +419,15 @@
           ir.Procedure existingSetter = existingSetters[field.name];
           cls.addField(cloneVisitor.cloneField(
               field, existingGetter?.reference, existingSetter?.reference));
+          // TODO(johnniwinther): We need to unbind the canonical names before
+          // serializing these references since the canonical names refer to
+          // @getters and @setters instead of @fields and @fields=. This will
+          // not be needed if stop using @fields/@fields= in favor of
+          // @getters/@setters in general.
           if (existingGetter != null) {
-            existingGetter.reference.canonicalName?.unbind();
             cls.procedures.remove(existingGetter);
           }
           if (existingSetter != null) {
-            existingSetter.reference.canonicalName?.unbind();
             cls.procedures.remove(existingSetter);
           }
           continue;
@@ -444,7 +447,6 @@
                   ? existingSetters[procedure.name]
                   : existingNonSetters[procedure.name];
           if (existingProcedure != null) {
-            existingProcedure.reference.canonicalName?.unbind();
             cls.procedures.remove(existingProcedure);
           }
           cls.addProcedure(cloneVisitor.cloneProcedure(
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index 22df841..6920c7b 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -17,6 +17,7 @@
         IntLiteral,
         InterfaceType,
         ListLiteral,
+        Name,
         ProcedureKind,
         PropertyGet,
         Reference,
@@ -181,21 +182,24 @@
     Reference valuesGetterReference;
     Reference valuesSetterReference;
     if (referencesFrom != null) {
-      constructorReference = referencesFromIndexed.lookupConstructor("");
+      constructorReference =
+          referencesFromIndexed.lookupConstructor(new Name(""));
       toStringReference =
-          referencesFromIndexed.lookupGetterReference("toString");
+          referencesFromIndexed.lookupGetterReference(new Name("toString"));
+      Name indexName = new Name("index");
       indexGetterReference =
-          referencesFromIndexed.lookupGetterReference("index");
+          referencesFromIndexed.lookupGetterReference(indexName);
       indexSetterReference =
-          referencesFromIndexed.lookupSetterReference("index");
-      _nameGetterReference =
-          referencesFromIndexed.lookupGetterReference("_name");
-      _nameSetterReference =
-          referencesFromIndexed.lookupSetterReference("_name");
+          referencesFromIndexed.lookupSetterReference(indexName);
+      _nameGetterReference = referencesFromIndexed.lookupGetterReference(
+          new Name("_name", referencesFromIndexed.library));
+      _nameSetterReference = referencesFromIndexed.lookupSetterReference(
+          new Name("_name", referencesFromIndexed.library));
+      Name valuesName = new Name("values");
       valuesGetterReference =
-          referencesFromIndexed.lookupGetterReference("values");
+          referencesFromIndexed.lookupGetterReference(valuesName);
       valuesSetterReference =
-          referencesFromIndexed.lookupSetterReference("values");
+          referencesFromIndexed.lookupSetterReference(valuesName);
     }
 
     members["index"] = new SourceFieldBuilder(
@@ -309,10 +313,15 @@
               name.length,
               parent.fileUri);
         }
-        Reference getterReference =
-            referencesFromIndexed?.lookupGetterReference(name);
-        Reference setterReference =
-            referencesFromIndexed?.lookupSetterReference(name);
+        Reference getterReference;
+        Reference setterReference;
+        if (referencesFromIndexed != null) {
+          Name nameName = new Name(name, referencesFromIndexed.library);
+          getterReference =
+              referencesFromIndexed.lookupGetterReference(nameName);
+          setterReference =
+              referencesFromIndexed.lookupSetterReference(nameName);
+        }
         FieldBuilder fieldBuilder = new SourceFieldBuilder(
             metadata,
             selfType,
diff --git a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
index fa09a80..6dfd603 100644
--- a/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/combined_member_signature.dart
@@ -510,8 +510,8 @@
     Class enclosingClass = classBuilder.cls;
     Reference reference;
     if (classBuilder.referencesFromIndexed != null) {
-      reference = classBuilder.referencesFromIndexed
-          .lookupGetterReference(member.name.text);
+      reference =
+          classBuilder.referencesFromIndexed.lookupGetterReference(member.name);
     }
     Uri fileUri;
     int startFileOffset;
@@ -556,8 +556,8 @@
     Class enclosingClass = classBuilder.cls;
     Reference reference;
     if (classBuilder.referencesFromIndexed != null) {
-      reference = classBuilder.referencesFromIndexed
-          .lookupSetterReference(member.name.text);
+      reference =
+          classBuilder.referencesFromIndexed.lookupSetterReference(member.name);
     }
     Uri fileUri;
     int startFileOffset;
@@ -599,7 +599,7 @@
     assert(copyLocation != null);
     Class enclosingClass = classBuilder.cls;
     Reference reference = classBuilder.referencesFromIndexed
-        ?.lookupGetterReference(procedure.name.text);
+        ?.lookupGetterReference(procedure.name);
     Uri fileUri;
     int startFileOffset;
     int fileOffset;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 9d3f663..6ca84c6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -640,7 +640,7 @@
     IndexedClass indexedClass = builder.referencesFromIndexed;
     Constructor referenceFrom;
     if (indexedClass != null) {
-      referenceFrom = indexedClass.lookupConstructor("");
+      referenceFrom = indexedClass.lookupConstructor(new Name(""));
     }
 
     /// From [Dart Programming Language Specification, 4th Edition](
@@ -691,7 +691,7 @@
     IndexedClass indexedClass = builder.referencesFromIndexed;
     Constructor referenceFrom;
     if (indexedClass != null) {
-      referenceFrom = indexedClass.lookupConstructor("");
+      referenceFrom = indexedClass.lookupConstructor(new Name(""));
     }
 
     if (supertype is ClassBuilder) {
@@ -702,7 +702,8 @@
       void addSyntheticConstructor(String name, MemberBuilder memberBuilder) {
         if (memberBuilder.member is Constructor) {
           substitutionMap ??= builder.getSubstitutionMap(superclassBuilder.cls);
-          Constructor referenceFrom = indexedClass?.lookupConstructor(name);
+          Constructor referenceFrom = indexedClass
+              ?.lookupConstructor(new Name(name, indexedClass.library));
           builder.addSyntheticConstructor(_makeMixinApplicationConstructor(
               builder,
               builder.cls.mixin,
diff --git a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
index 88c5a6d..81ea7a7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/load_library_builder.dart
@@ -52,7 +52,7 @@
     String prefix = expression.import.name;
     Name name = new Name('_#loadLibrary_$prefix', parent.library);
     Reference reference =
-        parent.referencesFromIndexed?.lookupGetterReference(name.text);
+        parent.referencesFromIndexed?.lookupGetterReference(name);
     tearoff = new Procedure(
         name,
         ProcedureKind.Method,
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index a222357..6484fa9d 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -908,8 +908,9 @@
                 // is actually in the kernel tree. This call creates a StaticGet
                 // to [declaration.target] in a field `_redirecting#` which is
                 // only legal to do to things in the kernel tree.
-                Reference getterReference = referencesFromIndexed
-                    ?.lookupGetterReference("_redirecting#");
+                Reference getterReference =
+                    referencesFromIndexed?.lookupGetterReference(new Name(
+                        "_redirecting#", referencesFromIndexed.library));
                 _addRedirectingConstructor(
                     declaration, library, getterReference);
               }
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 0440125..9e90a19 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -979,9 +979,10 @@
     library.procedures.sort(compareProcedures);
 
     if (unserializableExports != null) {
+      Name fieldName = new Name("_exports#", library);
       Reference getterReference =
-          referencesFromIndexed?.lookupGetterReference("_exports#");
-      library.addField(new Field.immutable(new Name("_exports#", library),
+          referencesFromIndexed?.lookupGetterReference(fieldName);
+      library.addField(new Field.immutable(fieldName,
           initializer: new StringLiteral(jsonEncode(unserializableExports)),
           isStatic: true,
           isConst: true,
@@ -2170,10 +2171,11 @@
           isSynthesized: fieldIsLateWithLowering);
       IndexedContainer indexedContainer =
           _currentClassReferencesFromIndexed ?? referencesFromIndexed;
+      Name nameToLookupName = new Name(nameToLookup, indexedContainer.library);
       fieldGetterReference =
-          indexedContainer.lookupGetterReference(nameToLookup);
+          indexedContainer.lookupGetterReference(nameToLookupName);
       fieldSetterReference =
-          indexedContainer.lookupSetterReference(nameToLookup);
+          indexedContainer.lookupSetterReference(nameToLookupName);
       if (fieldIsLateWithLowering) {
         String lateIsSetName = SourceFieldBuilder.createFieldName(
             FieldNameType.IsSetField, name,
@@ -2182,24 +2184,28 @@
             isExtensionMethod: isExtension,
             extensionName: extensionName,
             isSynthesized: fieldIsLateWithLowering);
+        Name lateIsSetNameName =
+            new Name(lateIsSetName, indexedContainer.library);
         lateIsSetGetterReference =
-            indexedContainer.lookupGetterReference(lateIsSetName);
+            indexedContainer.lookupGetterReference(lateIsSetNameName);
         lateIsSetSetterReference =
-            indexedContainer.lookupSetterReference(lateIsSetName);
-        getterReference = indexedContainer.lookupGetterReference(
+            indexedContainer.lookupSetterReference(lateIsSetNameName);
+        getterReference = indexedContainer.lookupGetterReference(new Name(
             SourceFieldBuilder.createFieldName(FieldNameType.Getter, name,
                 isInstanceMember: isInstanceMember,
                 className: className,
                 isExtensionMethod: isExtension,
                 extensionName: extensionName,
-                isSynthesized: fieldIsLateWithLowering));
-        setterReference = indexedContainer.lookupSetterReference(
+                isSynthesized: fieldIsLateWithLowering),
+            indexedContainer.library));
+        setterReference = indexedContainer.lookupSetterReference(new Name(
             SourceFieldBuilder.createFieldName(FieldNameType.Setter, name,
                 isInstanceMember: isInstanceMember,
                 className: className,
                 isExtensionMethod: isExtension,
                 extensionName: extensionName,
-                isSynthesized: fieldIsLateWithLowering));
+                isSynthesized: fieldIsLateWithLowering),
+            indexedContainer.library));
       }
     }
 
@@ -2252,8 +2258,9 @@
     MetadataCollector metadataCollector = loader.target.metadataCollector;
     Constructor referenceFrom;
     if (_currentClassReferencesFromIndexed != null) {
-      referenceFrom =
-          _currentClassReferencesFromIndexed.lookupConstructor(constructorName);
+      referenceFrom = _currentClassReferencesFromIndexed.lookupConstructor(
+          new Name(
+              constructorName, _currentClassReferencesFromIndexed.library));
     }
     ConstructorBuilder constructorBuilder = new ConstructorBuilderImpl(
         metadata,
@@ -2323,10 +2330,12 @@
       if (_currentClassReferencesFromIndexed != null) {
         if (kind == ProcedureKind.Setter) {
           procedureReference =
-              _currentClassReferencesFromIndexed.lookupSetterReference(name);
+              _currentClassReferencesFromIndexed.lookupSetterReference(
+                  new Name(name, _currentClassReferencesFromIndexed.library));
         } else {
           procedureReference =
-              _currentClassReferencesFromIndexed.lookupGetterReference(name);
+              _currentClassReferencesFromIndexed.lookupGetterReference(
+                  new Name(name, _currentClassReferencesFromIndexed.library));
         }
       } else {
         if (currentTypeParameterScopeBuilder.kind ==
@@ -2339,11 +2348,11 @@
               currentTypeParameterScopeBuilder.name,
               name);
           if (extensionIsStatic && kind == ProcedureKind.Setter) {
-            procedureReference =
-                referencesFromIndexed.lookupSetterReference(nameToLookup);
+            procedureReference = referencesFromIndexed.lookupSetterReference(
+                new Name(nameToLookup, referencesFromIndexed.library));
           } else {
-            procedureReference =
-                referencesFromIndexed.lookupGetterReference(nameToLookup);
+            procedureReference = referencesFromIndexed.lookupGetterReference(
+                new Name(nameToLookup, referencesFromIndexed.library));
           }
           if (kind == ProcedureKind.Method) {
             String tearOffNameToLookup =
@@ -2353,16 +2362,16 @@
                     ProcedureKind.Getter,
                     currentTypeParameterScopeBuilder.name,
                     name);
-            tearOffReference = referencesFromIndexed
-                .lookupGetterReference(tearOffNameToLookup);
+            tearOffReference = referencesFromIndexed.lookupGetterReference(
+                new Name(tearOffNameToLookup, referencesFromIndexed.library));
           }
         } else {
           if (kind == ProcedureKind.Setter) {
-            procedureReference =
-                referencesFromIndexed.lookupSetterReference(name);
+            procedureReference = referencesFromIndexed.lookupSetterReference(
+                new Name(name, referencesFromIndexed.library));
           } else {
-            procedureReference =
-                referencesFromIndexed.lookupGetterReference(name);
+            procedureReference = referencesFromIndexed.lookupGetterReference(
+                new Name(name, referencesFromIndexed.library));
           }
         }
       }
@@ -2427,8 +2436,9 @@
       procedureName = name;
     }
 
-    Reference reference = _currentClassReferencesFromIndexed
-        ?.lookupGetterReference(procedureName);
+    Reference reference =
+        _currentClassReferencesFromIndexed?.lookupGetterReference(new Name(
+            procedureName, _currentClassReferencesFromIndexed.library));
 
     ProcedureBuilder procedureBuilder;
     if (redirectionTarget != null) {
diff --git a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
index 328e3a7..22ffcf8 100644
--- a/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
+++ b/pkg/front_end/test/crashing_test_case_minimizer_impl.dart
@@ -701,20 +701,20 @@
 
     // TODO(jensj): don't use full uris.
     print("""
-        # Copyright (c) 2020, 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.md file.
-        
-        # Reproduce a crash.
-        
-        type: newworld""");
+# Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Reproduce a crash.
+
+type: newworld""");
     if (_settings.widgetTransformation) {
       print("trackWidgetCreation: true");
       print("target: DDC # basically needed for widget creation to be run");
     }
     print("""
-        worlds:
-          - entry: $_mainUri""");
+worlds:
+  - entry: $_mainUri""");
     if (_settings.experimentalInvalidation) {
       print("    experiments: alternative-invalidation-strategy");
     }
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 74205c3..c2db70b 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -606,6 +606,7 @@
 scheduler
 screen
 scripts
+scroll
 sdkroot
 sdks
 secondary
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml
new file mode 100644
index 0000000..63f5ae4
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml
@@ -0,0 +1,44 @@
+# Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+# Reproduce a crash.
+
+type: newworld
+worlds:
+  - entry: app/main.dart
+    experiments: alternative-invalidation-strategy
+    sources:
+      app/.dart_tool/package_config.json: |
+        {
+          "configVersion": 2,
+          "packages": [
+            {
+              "name": "flutter",
+              "rootUri": "../../flutter",
+              "languageVersion": "2.12"
+            }
+          ]
+        }
+      app/main.dart: |
+        import "package:flutter/lib1.dart";
+        class _Bar extends RestorableProperty {}
+      flutter/lib1.dart: |
+        import "lib2.dart";
+        abstract class RestorableProperty extends ChangeNotifier {
+          bool _debugAssertNotDisposed() { return true; }
+        }
+      flutter/lib2.dart: |
+        class ChangeNotifier {
+          bool _debugAssertNotDisposed() { return true; }
+        }
+    expectedLibraryCount: 3
+
+  - entry: app/main.dart
+    experiments: alternative-invalidation-strategy
+    worldType: updated
+    expectInitializeFromDill: false
+    invalidate:
+      - app/main.dart
+    expectedLibraryCount: 3
+    expectsRebuildBodiesOnly: true
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml.world.1.expect
new file mode 100644
index 0000000..fab130fd
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml.world.1.expect
@@ -0,0 +1,47 @@
+main = <No Member>;
+library from "org-dartlang-test:///app/main.dart" as main {
+
+  import "package:flutter/lib1.dart";
+
+  class _Bar extends lib1::RestorableProperty {
+    synthetic constructor •() → main::_Bar*
+      : super lib1::RestorableProperty::•()
+      ;
+    abstract member-signature method _debugAssertNotDisposed() → dart.core::bool*; -> lib1::RestorableProperty::_debugAssertNotDisposed
+    abstract member-signature method _debugAssertNotDisposed() → dart.core::bool*; -> lib2::ChangeNotifier::_debugAssertNotDisposed
+    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
+    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
+    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
+    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
+    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
+    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
+    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
+    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
+    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
+    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+  }
+}
+library from "package:flutter/lib1.dart" as lib1 {
+
+  import "package:flutter/lib2.dart";
+
+  abstract class RestorableProperty extends lib2::ChangeNotifier {
+    synthetic constructor •() → lib1::RestorableProperty
+      : super lib2::ChangeNotifier::•()
+      ;
+    method _debugAssertNotDisposed() → dart.core::bool {
+      return true;
+    }
+  }
+}
+library from "package:flutter/lib2.dart" as lib2 {
+
+  class ChangeNotifier extends dart.core::Object {
+    synthetic constructor •() → lib2::ChangeNotifier
+      : super dart.core::Object::•()
+      ;
+    method _debugAssertNotDisposed() → dart.core::bool {
+      return true;
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml.world.2.expect
new file mode 100644
index 0000000..fab130fd
--- /dev/null
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/issue_44523.yaml.world.2.expect
@@ -0,0 +1,47 @@
+main = <No Member>;
+library from "org-dartlang-test:///app/main.dart" as main {
+
+  import "package:flutter/lib1.dart";
+
+  class _Bar extends lib1::RestorableProperty {
+    synthetic constructor •() → main::_Bar*
+      : super lib1::RestorableProperty::•()
+      ;
+    abstract member-signature method _debugAssertNotDisposed() → dart.core::bool*; -> lib1::RestorableProperty::_debugAssertNotDisposed
+    abstract member-signature method _debugAssertNotDisposed() → dart.core::bool*; -> lib2::ChangeNotifier::_debugAssertNotDisposed
+    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
+    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
+    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
+    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
+    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
+    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
+    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
+    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
+    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
+    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
+  }
+}
+library from "package:flutter/lib1.dart" as lib1 {
+
+  import "package:flutter/lib2.dart";
+
+  abstract class RestorableProperty extends lib2::ChangeNotifier {
+    synthetic constructor •() → lib1::RestorableProperty
+      : super lib2::ChangeNotifier::•()
+      ;
+    method _debugAssertNotDisposed() → dart.core::bool {
+      return true;
+    }
+  }
+}
+library from "package:flutter/lib2.dart" as lib2 {
+
+  class ChangeNotifier extends dart.core::Object {
+    synthetic constructor •() → lib2::ChangeNotifier
+      : super dart.core::Object::•()
+      ;
+    method _debugAssertNotDisposed() → dart.core::bool {
+      return true;
+    }
+  }
+}
diff --git a/pkg/front_end/testcases/none/mixin_super.dart b/pkg/front_end/testcases/none/mixin_super.dart
new file mode 100644
index 0000000..5b90234
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE.md file.
+
+mixin Diagnosticable {
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
+
+class DiagnosticPropertiesBuilder {}
+
+abstract class PointerEvent with Diagnosticable {}
+
+abstract class PointerSignalEvent extends PointerEvent {}
+
+mixin _PointerEventDescription on PointerEvent {
+  @override
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
+    super.debugFillProperties(properties);
+  }
+}
+mixin _CopyPointerScrollEvent on PointerEvent {}
+
+class PointerScrollEvent extends PointerSignalEvent
+    with _PointerEventDescription, _CopyPointerScrollEvent {
+  @override
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
+    super.debugFillProperties(properties);
+  }
+}
+
+main() {
+  new PointerScrollEvent()
+      .debugFillProperties(new DiagnosticPropertiesBuilder());
+}
diff --git a/pkg/front_end/testcases/none/mixin_super.dart.outline.expect b/pkg/front_end/testcases/none/mixin_super.dart.outline.expect
new file mode 100644
index 0000000..6e052ce
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart.outline.expect
@@ -0,0 +1,61 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/  {
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    ;
+}
+class DiagnosticPropertiesBuilder extends core::Object {
+  synthetic constructor •() → self::DiagnosticPropertiesBuilder
+    ;
+}
+abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::Diagnosticable::debugFillProperties}(properties);
+}
+abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
+  synthetic constructor •() → self::PointerEvent
+    ;
+}
+abstract class PointerSignalEvent extends self::PointerEvent {
+  synthetic constructor •() → self::PointerSignalEvent
+    ;
+}
+abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/  {
+  @core::override
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    ;
+}
+abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/  {
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
+    : super self::PointerSignalEvent::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::_PointerEventDescription::debugFillProperties}(properties);
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
+    ;
+}
+class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
+  synthetic constructor •() → self::PointerScrollEvent
+    ;
+  @core::override
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    ;
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///mixin_super.dart:16:4 -> InstanceConstant(const _Override{})
+Evaluated: StaticGet @ org-dartlang-testcase:///mixin_super.dart:25:4 -> InstanceConstant(const _Override{})
+Extra constant evaluation: evaluated: 6, effectively constant: 2
diff --git a/pkg/front_end/testcases/none/mixin_super.dart.strong.expect b/pkg/front_end/testcases/none/mixin_super.dart.strong.expect
new file mode 100644
index 0000000..9929e69
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart.strong.expect
@@ -0,0 +1,65 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/  {
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
+}
+class DiagnosticPropertiesBuilder extends core::Object {
+  synthetic constructor •() → self::DiagnosticPropertiesBuilder
+    : super core::Object::•()
+    ;
+}
+abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::Diagnosticable::debugFillProperties}(properties);
+}
+abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
+  synthetic constructor •() → self::PointerEvent
+    : super self::_PointerEvent&Object&Diagnosticable::•()
+    ;
+}
+abstract class PointerSignalEvent extends self::PointerEvent {
+  synthetic constructor •() → self::PointerSignalEvent
+    : super self::PointerEvent::•()
+    ;
+}
+abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/  {
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
+  }
+}
+abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/  {
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
+    : super self::PointerSignalEvent::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::_PointerEventDescription::debugFillProperties}(properties);
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
+    ;
+}
+class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
+  synthetic constructor •() → self::PointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
+    ;
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
+  }
+}
+static method main() → dynamic {
+  new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/none/mixin_super.dart.strong.transformed.expect b/pkg/front_end/testcases/none/mixin_super.dart.strong.transformed.expect
new file mode 100644
index 0000000..9929e69
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart.strong.transformed.expect
@@ -0,0 +1,65 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/  {
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
+}
+class DiagnosticPropertiesBuilder extends core::Object {
+  synthetic constructor •() → self::DiagnosticPropertiesBuilder
+    : super core::Object::•()
+    ;
+}
+abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::Diagnosticable::debugFillProperties}(properties);
+}
+abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
+  synthetic constructor •() → self::PointerEvent
+    : super self::_PointerEvent&Object&Diagnosticable::•()
+    ;
+}
+abstract class PointerSignalEvent extends self::PointerEvent {
+  synthetic constructor •() → self::PointerSignalEvent
+    : super self::PointerEvent::•()
+    ;
+}
+abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/  {
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
+  }
+}
+abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/  {
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
+    : super self::PointerSignalEvent::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::_PointerEventDescription::debugFillProperties}(properties);
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
+    ;
+}
+class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
+  synthetic constructor •() → self::PointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
+    ;
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
+  }
+}
+static method main() → dynamic {
+  new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/none/mixin_super.dart.textual_outline.expect b/pkg/front_end/testcases/none/mixin_super.dart.textual_outline.expect
new file mode 100644
index 0000000..dd59658
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart.textual_outline.expect
@@ -0,0 +1,23 @@
+mixin Diagnosticable {
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
+
+class DiagnosticPropertiesBuilder {}
+
+abstract class PointerEvent with Diagnosticable {}
+
+abstract class PointerSignalEvent extends PointerEvent {}
+
+mixin _PointerEventDescription on PointerEvent {
+  @override
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
+mixin _CopyPointerScrollEvent on PointerEvent {}
+
+class PointerScrollEvent extends PointerSignalEvent
+    with _PointerEventDescription, _CopyPointerScrollEvent {
+  @override
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/none/mixin_super.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/none/mixin_super.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..e011475
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+abstract class PointerEvent with Diagnosticable {}
+
+abstract class PointerSignalEvent extends PointerEvent {}
+
+class DiagnosticPropertiesBuilder {}
+
+class PointerScrollEvent extends PointerSignalEvent
+    with _PointerEventDescription, _CopyPointerScrollEvent {
+  @override
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
+
+main() {}
+mixin Diagnosticable {
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
+mixin _CopyPointerScrollEvent on PointerEvent {}
+mixin _PointerEventDescription on PointerEvent {
+  @override
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
diff --git a/pkg/front_end/testcases/none/mixin_super.dart.weak.expect b/pkg/front_end/testcases/none/mixin_super.dart.weak.expect
new file mode 100644
index 0000000..9929e69
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart.weak.expect
@@ -0,0 +1,65 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/  {
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
+}
+class DiagnosticPropertiesBuilder extends core::Object {
+  synthetic constructor •() → self::DiagnosticPropertiesBuilder
+    : super core::Object::•()
+    ;
+}
+abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::Diagnosticable::debugFillProperties}(properties);
+}
+abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
+  synthetic constructor •() → self::PointerEvent
+    : super self::_PointerEvent&Object&Diagnosticable::•()
+    ;
+}
+abstract class PointerSignalEvent extends self::PointerEvent {
+  synthetic constructor •() → self::PointerSignalEvent
+    : super self::PointerEvent::•()
+    ;
+}
+abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/  {
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
+  }
+}
+abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/  {
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
+    : super self::PointerSignalEvent::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::_PointerEventDescription::debugFillProperties}(properties);
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
+    ;
+}
+class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
+  synthetic constructor •() → self::PointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
+    ;
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
+  }
+}
+static method main() → dynamic {
+  new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/none/mixin_super.dart.weak.transformed.expect b/pkg/front_end/testcases/none/mixin_super.dart.weak.transformed.expect
new file mode 100644
index 0000000..9929e69
--- /dev/null
+++ b/pkg/front_end/testcases/none/mixin_super.dart.weak.transformed.expect
@@ -0,0 +1,65 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class Diagnosticable extends core::Object /*isMixinDeclaration*/  {
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {}
+}
+class DiagnosticPropertiesBuilder extends core::Object {
+  synthetic constructor •() → self::DiagnosticPropertiesBuilder
+    : super core::Object::•()
+    ;
+}
+abstract class _PointerEvent&Object&Diagnosticable = core::Object with self::Diagnosticable /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •() → self::_PointerEvent&Object&Diagnosticable
+    : super core::Object::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::Diagnosticable::debugFillProperties}(properties);
+}
+abstract class PointerEvent extends self::_PointerEvent&Object&Diagnosticable {
+  synthetic constructor •() → self::PointerEvent
+    : super self::_PointerEvent&Object&Diagnosticable::•()
+    ;
+}
+abstract class PointerSignalEvent extends self::PointerEvent {
+  synthetic constructor •() → self::PointerSignalEvent
+    : super self::PointerEvent::•()
+    ;
+}
+abstract class _PointerEventDescription extends self::PointerEvent /*isMixinDeclaration*/  {
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerEvent&Object&Diagnosticable::debugFillProperties}(properties);
+  }
+}
+abstract class _CopyPointerScrollEvent extends self::PointerEvent /*isMixinDeclaration*/  {
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription = self::PointerSignalEvent with self::_PointerEventDescription /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription
+    : super self::PointerSignalEvent::•()
+    ;
+  mixin-super-stub method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void
+    return super.{self::_PointerEventDescription::debugFillProperties}(properties);
+}
+abstract class _PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent = self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription with self::_CopyPointerScrollEvent /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::•()
+    ;
+}
+class PointerScrollEvent extends self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent {
+  synthetic constructor •() → self::PointerScrollEvent
+    : super self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription&_CopyPointerScrollEvent::•()
+    ;
+  @#C1
+  method debugFillProperties(self::DiagnosticPropertiesBuilder properties) → void {
+    super.{self::_PointerScrollEvent&PointerSignalEvent&_PointerEventDescription::debugFillProperties}(properties);
+  }
+}
+static method main() → dynamic {
+  new self::PointerScrollEvent::•().{self::PointerScrollEvent::debugFillProperties}(new self::DiagnosticPropertiesBuilder::•()){(self::DiagnosticPropertiesBuilder) → void};
+}
+
+constants  {
+  #C1 = core::_Override {}
+}
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 2d00cd0..d84d3b9 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -181,6 +181,7 @@
 none/operator: TypeCheckError
 none/property_get: TypeCheckError
 none/property_set: TypeCheckError
+none/mixin_super: TextSerializationFailure
 none/tearoff_opt_out: TextSerializationFailure
 rasta/abstract_constructor: RuntimeError
 rasta/bad_constructor_redirection: RuntimeError
diff --git a/pkg/kernel/lib/reference_from_index.dart b/pkg/kernel/lib/reference_from_index.dart
index 6257e3d..fd99974 100644
--- a/pkg/kernel/lib/reference_from_index.dart
+++ b/pkg/kernel/lib/reference_from_index.dart
@@ -9,6 +9,7 @@
         Extension,
         Field,
         Library,
+        Name,
         Reference,
         Procedure,
         Typedef;
@@ -28,19 +29,23 @@
 }
 
 abstract class IndexedContainer {
-  final Map<String, Reference> _getterReferences = new Map<String, Reference>();
-  final Map<String, Reference> _setterReferences = new Map<String, Reference>();
+  final Map<Name, Reference> _getterReferences = new Map<Name, Reference>();
+  final Map<Name, Reference> _setterReferences = new Map<Name, Reference>();
 
-  Reference lookupGetterReference(String name) => _getterReferences[name];
-  Reference lookupSetterReference(String name) => _setterReferences[name];
+  Reference lookupGetterReference(Name name) => _getterReferences[name];
+  Reference lookupSetterReference(Name name) => _setterReferences[name];
+
+  Library get library;
 
   void _addProcedures(List<Procedure> procedures) {
     for (int i = 0; i < procedures.length; i++) {
       Procedure procedure = procedures[i];
-      String name = procedure.name.text;
+      Name name = procedure.name;
       if (procedure.isSetter) {
+        assert(_setterReferences[name] == null);
         _setterReferences[name] = procedure.reference;
       } else {
+        assert(_getterReferences[name] == null);
         _getterReferences[name] = procedure.reference;
       }
     }
@@ -49,9 +54,11 @@
   void _addFields(List<Field> fields) {
     for (int i = 0; i < fields.length; i++) {
       Field field = fields[i];
-      String name = field.name.text;
+      Name name = field.name;
+      assert(_getterReferences[name] == null);
       _getterReferences[name] = field.getterReference;
       if (field.hasSetter) {
+        assert(_setterReferences[name] == null);
         _setterReferences[name] = field.setterReference;
       }
     }
@@ -64,19 +71,24 @@
   final Map<String, IndexedClass> _indexedClasses =
       new Map<String, IndexedClass>();
   final Map<String, Extension> _extensions = new Map<String, Extension>();
+  final Library library;
 
-  IndexedLibrary(Library library) {
+  IndexedLibrary(this.library) {
     for (int i = 0; i < library.typedefs.length; i++) {
       Typedef typedef = library.typedefs[i];
+      assert(_typedefs[typedef.name] == null);
       _typedefs[typedef.name] = typedef;
     }
     for (int i = 0; i < library.classes.length; i++) {
       Class c = library.classes[i];
+      assert(_classes[c.name] == null);
       _classes[c.name] = c;
-      _indexedClasses[c.name] = new IndexedClass._(c);
+      assert(_indexedClasses[c.name] == null);
+      _indexedClasses[c.name] = new IndexedClass._(c, library);
     }
     for (int i = 0; i < library.extensions.length; i++) {
       Extension extension = library.extensions[i];
+      assert(_extensions[extension.name] == null);
       _extensions[extension.name] = extension;
     }
     _addProcedures(library.procedures);
@@ -90,16 +102,17 @@
 }
 
 class IndexedClass extends IndexedContainer {
-  final Map<String, Constructor> _constructors = new Map<String, Constructor>();
+  final Map<Name, Constructor> _constructors = new Map<Name, Constructor>();
+  final Library library;
 
-  IndexedClass._(Class c) {
+  IndexedClass._(Class c, this.library) {
     for (int i = 0; i < c.constructors.length; i++) {
       Constructor constructor = c.constructors[i];
-      _constructors[constructor.name.text] = constructor;
+      _constructors[constructor.name] = constructor;
     }
     _addProcedures(c.procedures);
     _addFields(c.fields);
   }
 
-  Constructor lookupConstructor(String name) => _constructors[name];
+  Constructor lookupConstructor(Name name) => _constructors[name];
 }
diff --git a/pkg/kernel/lib/transformations/mixin_full_resolution.dart b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
index 92b0b16..6a9a8b8 100644
--- a/pkg/kernel/lib/transformations/mixin_full_resolution.dart
+++ b/pkg/kernel/lib/transformations/mixin_full_resolution.dart
@@ -119,9 +119,9 @@
 
       for (var field in class_.mixin.fields) {
         Reference getterReference =
-            indexedClass?.lookupGetterReference(field.name.text);
+            indexedClass?.lookupGetterReference(field.name);
         Reference setterReference =
-            indexedClass?.lookupSetterReference(field.name.text);
+            indexedClass?.lookupSetterReference(field.name);
         if (getterReference == null) {
           getterReference = nonSetters[field.name]?.reference;
           getterReference?.canonicalName?.unbind();
@@ -166,9 +166,9 @@
 
       Reference reference;
       if (procedure.isSetter) {
-        reference = indexedClass?.lookupSetterReference(procedure.name.text);
+        reference = indexedClass?.lookupSetterReference(procedure.name);
       } else {
-        reference = indexedClass?.lookupGetterReference(procedure.name.text);
+        reference = indexedClass?.lookupGetterReference(procedure.name);
       }
 
       // Linear search for a forwarding stub with the same name.
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index fdaede1..6970c22 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -343,7 +343,7 @@
     // C.#fromTypedDataBase(Object address) : super.fromPointer(address);
     final VariableDeclaration pointer = new VariableDeclaration("#pointer");
     final name = Name("#fromTypedDataBase");
-    final referenceFrom = indexedClass?.lookupConstructor(name.text);
+    final referenceFrom = indexedClass?.lookupConstructor(name);
     final Constructor ctor = Constructor(
         FunctionNode(EmptyStatement(), positionalParameters: [pointer]),
         name: name,
@@ -676,7 +676,7 @@
     final Procedure getter = Procedure(field.name, ProcedureKind.Getter,
         FunctionNode(getterStatement, returnType: field.type),
         fileUri: field.fileUri,
-        reference: indexedClass?.lookupGetterReference(field.name.text))
+        reference: indexedClass?.lookupGetterReference(field.name))
       ..fileOffset = field.fileOffset
       ..isNonNullableByDefault = field.isNonNullableByDefault;
 
@@ -693,7 +693,7 @@
           FunctionNode(setterStatement,
               returnType: VoidType(), positionalParameters: [argument]),
           fileUri: field.fileUri,
-          reference: indexedClass?.lookupSetterReference(field.name.text))
+          reference: indexedClass?.lookupSetterReference(field.name))
         ..fileOffset = field.fileOffset
         ..isNonNullableByDefault = field.isNonNullableByDefault;
     }
@@ -709,7 +709,7 @@
   void _replaceSizeOfMethod(
       Class struct, Map<Abi, int> sizes, IndexedClass indexedClass) {
     var name = Name("#sizeOf");
-    var getterReference = indexedClass?.lookupGetterReference(name.text);
+    var getterReference = indexedClass?.lookupGetterReference(name);
     final Field sizeOf = Field.immutable(name,
         isStatic: true,
         isFinal: true,
diff --git a/pkg/vm/lib/transformations/ffi_use_sites.dart b/pkg/vm/lib/transformations/ffi_use_sites.dart
index ae57831..3260c0a 100644
--- a/pkg/vm/lib/transformations/ffi_use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi_use_sites.dart
@@ -337,7 +337,7 @@
     final nativeFunctionType = InterfaceType(
         nativeFunctionClass, Nullability.legacy, node.arguments.types);
     var name = Name("_#ffiCallback${callbackCount++}", currentLibrary);
-    var getterReference = currentLibraryIndex?.lookupGetterReference(name.text);
+    var getterReference = currentLibraryIndex?.lookupGetterReference(name);
     final Field field = Field.immutable(name,
         type: InterfaceType(
             pointerClass, Nullability.legacy, [nativeFunctionType]),
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 4af9266..6e3de37 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1252,10 +1252,14 @@
   const Field& sentinel = Field::Handle(
       zone, enum_cls.LookupStaticField(Symbols::_DeletedEnumSentinel()));
   ASSERT(!sentinel.IsNull());
-  sentinel.SetStaticValue(enum_value, true);
+
+  // The static const field contains `Object::null()` instead of
+  // `Object::sentinel()` - so it's not considered an initializing store.
+  sentinel.SetStaticConstFieldValue(enum_value,
+                                    /*assert_initializing_store*/ false);
 
   ASSERT(enum_cls.kernel_offset() > 0);
-  Error& error = Error::Handle(zone);
+  Object& error = Error::Handle(zone);
   for (intptr_t i = 0; i < fields.Length(); i++) {
     field = Field::RawCast(fields.At(i));
     if (!field.is_static() || !field.is_const() ||
@@ -1265,11 +1269,9 @@
     // Hot-reload expects the static const fields to be evaluated when
     // performing a reload.
     if (!FLAG_precompiled_mode) {
-      if (field.IsUninitialized()) {
-        error = field.InitializeStatic();
-        if (!error.IsNull()) {
-          ReportError(error);
-        }
+      error = field.StaticConstFieldValue();
+      if (error.IsError()) {
+        ReportError(Error::Cast(error));
       }
     }
   }
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index 6b778d7..70b1efa 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -1831,8 +1831,9 @@
 
           // This cleans up references to field current and initial values.
           if (field.is_static()) {
-            field.SetStaticValue(Object::null_instance(),
-                                 /*save_initial_value=*/true);
+            field.SetStaticValue(Object::null_instance());
+            field.SetStaticConstFieldValue(Object::null_instance(),
+                                           /*assert_initializing_store=*/false);
           }
         }
       }
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index eb94c92..fd5cc1d 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -2582,7 +2582,8 @@
       ASSERT(Class::Handle(field.Owner()).library() ==
                  Library::InternalLibrary() &&
              Class::Handle(field.Owner()).Name() == Symbols::ClassID().raw());
-      return Constant(Instance::ZoneHandle(Z, field.StaticValue()));
+      return Constant(Instance::ZoneHandle(
+          Z, Instance::RawCast(field.StaticConstFieldValue())));
     } else {
       const Class& owner = Class::Handle(Z, field.Owner());
       const String& getter_name = H.DartGetterName(target);
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 5983ca2..7c0fab3 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -3433,8 +3433,11 @@
 #endif
     }
   } else if (field.is_const()) {
-    ASSERT(!field.IsUninitialized());
-    body += Constant(Instance::ZoneHandle(Z, field.StaticValue()));
+    const auto& value = Object::Handle(Z, field.StaticConstFieldValue());
+    if (value.IsError()) {
+      Report::LongJump(Error::Cast(value));
+    }
+    body += Constant(Instance::ZoneHandle(Z, Instance::RawCast(value.raw())));
   } else {
     // Static fields
     //  - with trivial initializer
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index e862b759..3d52bb5 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -10571,9 +10571,8 @@
       }
     }
     ASSERT(value.IsNull() || value.IsInstance());
-    SetStaticValue(
-        value.IsNull() ? Instance::null_instance() : Instance::Cast(value),
-        is_const());
+    SetStaticValue(value.IsNull() ? Instance::null_instance()
+                                  : Instance::Cast(value));
     return Error::null();
   } else if (StaticValue() == Object::transition_sentinel().raw()) {
     ASSERT(!is_late());
@@ -10586,6 +10585,42 @@
   return Error::null();
 }
 
+ObjectPtr Field::StaticConstFieldValue() const {
+  ASSERT(is_static() && is_const());
+
+  auto thread = Thread::Current();
+  auto zone = thread->zone();
+  auto initial_field_table = thread->isolate_group()->initial_field_table();
+
+  // We can safely cache the value of the static const field in the initial
+  // field table.
+  auto& value = Object::Handle(zone, initial_field_table->At(field_id()));
+  if (value.raw() == Object::sentinel().raw()) {
+    ASSERT(has_initializer());
+    value = EvaluateInitializer();
+    if (!value.IsError()) {
+      ASSERT(value.IsNull() || value.IsInstance());
+      SetStaticConstFieldValue(value.IsNull() ? Instance::null_instance()
+                                              : Instance::Cast(value));
+    }
+  }
+  return value.raw();
+}
+
+void Field::SetStaticConstFieldValue(const Instance& value,
+                                     bool assert_initializing_store) const {
+  auto thread = Thread::Current();
+  auto initial_field_table = thread->isolate_group()->initial_field_table();
+
+  SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
+  ASSERT(initial_field_table->At(field_id()) == Object::sentinel().raw() ||
+         initial_field_table->At(field_id()) == value.raw() ||
+         !assert_initializing_store);
+  initial_field_table->SetAt(field_id(), value.IsNull()
+                                             ? Instance::null_instance().raw()
+                                             : Instance::Cast(value).raw());
+}
+
 ObjectPtr Field::EvaluateInitializer() const {
   Thread* const thread = Thread::Current();
   ASSERT(thread->IsMutatorThread());
@@ -10788,8 +10823,7 @@
   return false;  // Not found.
 }
 
-void Field::SetStaticValue(const Instance& value,
-                           bool save_initial_value) const {
+void Field::SetStaticValue(const Instance& value) const {
   auto thread = Thread::Current();
   ASSERT(thread->IsMutatorThread());
 
@@ -10799,16 +10833,6 @@
 
   SafepointWriteRwLocker ml(thread, thread->isolate_group()->program_lock());
   thread->isolate()->field_table()->SetAt(id, value.raw());
-  if (save_initial_value) {
-    // TODO(https://dartbug.com/36097): We should re-visit call-sites where
-    // `save_initial_value == true` and try to have a different path. This
-    // method should only modify the isolate-local field state and not modify
-    // the initial field table.
-#if !defined(DART_PRECOMPILED_RUNTIME)
-    thread->isolate_group()->initial_field_table()->SetAt(field_id(),
-                                                          value.raw());
-#endif
-  }
 }
 
 static StaticTypeExactnessState TrivialTypeExactnessFor(const Class& cls) {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 7cf19f6..67df8c9 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -4072,9 +4072,12 @@
   inline intptr_t TargetOffset() const;
   static inline intptr_t TargetOffsetOf(FieldPtr field);
 
+  ObjectPtr StaticConstFieldValue() const;
+  void SetStaticConstFieldValue(const Instance& value,
+                                bool assert_initializing_store = true) const;
+
   inline InstancePtr StaticValue() const;
-  void SetStaticValue(const Instance& value,
-                      bool save_initial_value = false) const;
+  void SetStaticValue(const Instance& value) const;
 
   inline intptr_t field_id() const;
   inline void set_field_id(intptr_t field_id) const;
@@ -11171,8 +11174,7 @@
 
 InstancePtr Field::StaticValue() const {
   ASSERT(is_static());  // Valid only for static dart fields.
-  return Isolate::Current()->field_table()->At(
-      Smi::Value(raw_ptr()->host_offset_or_field_id()));
+  return Isolate::Current()->field_table()->At(field_id());
 }
 
 inline intptr_t Field::field_id() const {
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index 1620dcc..03f743b 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -344,17 +344,20 @@
         // Enum instances are only held in static fields.
         continue;
       }
+      ASSERT(field.is_const());
       if (enum_ident.Equals(Symbols::Values())) {
-        old_enum_values = field.StaticValue();
+        old_enum_values = Instance::RawCast(field.StaticConstFieldValue());
         // Non-enum instance.
         continue;
       }
       if (enum_ident.Equals(Symbols::_DeletedEnumSentinel())) {
-        old_deleted_enum_sentinel = field.StaticValue();
+        old_deleted_enum_sentinel =
+            Instance::RawCast(field.StaticConstFieldValue());
         // Non-enum instance.
         continue;
       }
-      old_enum_value = field.StaticValue();
+      old_enum_value = Instance::RawCast(field.StaticConstFieldValue());
+
       ASSERT(!old_enum_value.IsNull());
       VTIR_Print("Element %s being added to mapping\n", enum_ident.ToCString());
       bool update = enum_map.UpdateOrInsert(enum_ident, old_enum_value);
@@ -378,17 +381,20 @@
         // Enum instances are only held in static fields.
         continue;
       }
+      ASSERT(field.is_const());
       if (enum_ident.Equals(Symbols::Values())) {
-        enum_values = field.StaticValue();
+        enum_values = Instance::RawCast(field.StaticConstFieldValue());
         // Non-enum instance.
         continue;
       }
       if (enum_ident.Equals(Symbols::_DeletedEnumSentinel())) {
-        deleted_enum_sentinel = field.StaticValue();
+        deleted_enum_sentinel =
+            Instance::RawCast(field.StaticConstFieldValue());
         // Non-enum instance.
         continue;
       }
-      enum_value = field.StaticValue();
+      enum_value = Instance::RawCast(field.StaticConstFieldValue());
+
       ASSERT(!enum_value.IsNull());
       old_enum_value ^= enum_map.GetOrNull(enum_ident);
       if (old_enum_value.IsNull()) {
diff --git a/runtime/vm/regexp_assembler_ir.cc b/runtime/vm/regexp_assembler_ir.cc
index 8de3437..f01b655 100644
--- a/runtime/vm/regexp_assembler_ir.cc
+++ b/runtime/vm/regexp_assembler_ir.cc
@@ -376,18 +376,14 @@
   ASSERT(!word_character_field.IsNull());
 
   DEBUG_ASSERT(Thread::Current()->TopErrorHandlerIsSetJump());
-  if (word_character_field.IsUninitialized()) {
-    ASSERT(!Compiler::IsBackgroundCompilation());
-    const Error& error =
-        Error::Handle(Z, word_character_field.InitializeStatic());
-    if (!error.IsNull()) {
-      Report::LongJump(error);
-    }
-  }
-  ASSERT(!word_character_field.IsUninitialized());
 
-  return new (Z) ConstantInstr(
-      Instance::ZoneHandle(Z, word_character_field.StaticValue()));
+  const auto& value =
+      Object::Handle(Z, word_character_field.StaticConstFieldValue());
+  if (value.IsError()) {
+    Report::LongJump(Error::Cast(value));
+  }
+  return new (Z)
+      ConstantInstr(Instance::ZoneHandle(Z, Instance::RawCast(value.raw())));
 }
 
 ComparisonInstr* IRRegExpMacroAssembler::Comparison(ComparisonKind kind,
diff --git a/tests/modular/mixin_super/main.dart b/tests/modular/mixin_super/main.dart
new file mode 100644
index 0000000..5b90234
--- /dev/null
+++ b/tests/modular/mixin_super/main.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE.md file.
+
+mixin Diagnosticable {
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {}
+}
+
+class DiagnosticPropertiesBuilder {}
+
+abstract class PointerEvent with Diagnosticable {}
+
+abstract class PointerSignalEvent extends PointerEvent {}
+
+mixin _PointerEventDescription on PointerEvent {
+  @override
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
+    super.debugFillProperties(properties);
+  }
+}
+mixin _CopyPointerScrollEvent on PointerEvent {}
+
+class PointerScrollEvent extends PointerSignalEvent
+    with _PointerEventDescription, _CopyPointerScrollEvent {
+  @override
+  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
+    super.debugFillProperties(properties);
+  }
+}
+
+main() {
+  new PointerScrollEvent()
+      .debugFillProperties(new DiagnosticPropertiesBuilder());
+}
diff --git a/tests/modular/mixin_super/modules.yaml b/tests/modular/mixin_super/modules.yaml
new file mode 100644
index 0000000..7313554
--- /dev/null
+++ b/tests/modular/mixin_super/modules.yaml
@@ -0,0 +1,6 @@
+# Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+dependencies:
+  main: []
diff --git a/tools/VERSION b/tools/VERSION
index 09493fa..58124d3 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 200
+PRERELEASE 201
 PRERELEASE_PATCH 0
\ No newline at end of file
