Version 2.18.0-226.0.dev

Merge commit 'c50236ff9ca3a4ec91de870fe4f52d4492947756' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b8bee49..5139f56 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,10 @@
 
 - The `Stream.fromIterable` stream can now be listened to more than once.
 
+### `dart:collection`
+
+- Deprecates `BidirectionalIterator`.
+
 ## 2.18.0
 
 ### Language
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 42e8fa8..e6fcee3 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -7821,6 +7821,101 @@
     correctionMessage: r"""Try adding a parameter list to the typedef.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateMixinApplicationNoConcreteGetter = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""The class doesn't have a concrete implementation of the super-accessed member '#name'.""",
+    withArguments: _withArgumentsMixinApplicationNoConcreteGetter);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeMixinApplicationNoConcreteGetter =
+    const Code<Message Function(String name)>(
+        "MixinApplicationNoConcreteGetter",
+        analyzerCodes: <String>[
+      "MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER"
+    ]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMixinApplicationNoConcreteGetter(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeMixinApplicationNoConcreteGetter,
+      problemMessage:
+          """The class doesn't have a concrete implementation of the super-accessed member '${name}'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeMixinApplicationNoConcreteMemberContext =
+    messageMixinApplicationNoConcreteMemberContext;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageMixinApplicationNoConcreteMemberContext =
+    const MessageCode("MixinApplicationNoConcreteMemberContext",
+        severity: Severity.context,
+        problemMessage:
+            r"""This is the super-access that doesn't have a concrete target.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateMixinApplicationNoConcreteMethod = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""The class doesn't have a concrete implementation of the super-invoked member '#name'.""",
+    withArguments: _withArgumentsMixinApplicationNoConcreteMethod);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeMixinApplicationNoConcreteMethod =
+    const Code<Message Function(String name)>(
+        "MixinApplicationNoConcreteMethod",
+        analyzerCodes: <String>[
+      "MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER"
+    ]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMixinApplicationNoConcreteMethod(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeMixinApplicationNoConcreteMethod,
+      problemMessage:
+          """The class doesn't have a concrete implementation of the super-invoked member '${name}'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String
+            name)> templateMixinApplicationNoConcreteSetter = const Template<
+        Message Function(String name)>(
+    problemMessageTemplate:
+        r"""The class doesn't have a concrete implementation of the super-accessed setter '#name'.""",
+    withArguments: _withArgumentsMixinApplicationNoConcreteSetter);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)> codeMixinApplicationNoConcreteSetter =
+    const Code<Message Function(String name)>(
+        "MixinApplicationNoConcreteSetter",
+        analyzerCodes: <String>[
+      "MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER"
+    ]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsMixinApplicationNoConcreteSetter(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeMixinApplicationNoConcreteSetter,
+      problemMessage:
+          """The class doesn't have a concrete implementation of the super-accessed setter '${name}'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeMixinDeclaresConstructor = messageMixinDeclaresConstructor;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index aa4e6c3..a1a18b5 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -772,7 +772,7 @@
           //
           // so we need get the superclasses from the on-clause, A, B, and C,
           // through [superclassConstraints].
-          for (ir.Supertype constraint in node.superclassConstraints()) {
+          for (ir.Supertype constraint in node.onClause) {
             interfaces.add(processSupertype(constraint));
           }
           // Set superclass to `Object`.
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 46cbef3..0fb9528 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -410,7 +410,7 @@
           //
           // so we need get the superclasses from the on-clause, A, B, and C,
           // through [superclassConstraints].
-          for (ir.Supertype constraint in node.superclassConstraints()) {
+          for (ir.Supertype constraint in node.onClause) {
             interfaces.add(processSupertype(constraint));
           }
           // Set superclass to `Object`.
diff --git a/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart b/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart
index abefe2d..c5e1d6a0 100644
--- a/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart
+++ b/pkg/compiler/lib/src/kernel/transformations/clone_mixin_methods_with_super.dart
@@ -60,8 +60,10 @@
         ensureExistingProcedureMaps();
         Procedure? existingGetter = existingNonSetters[field.name];
         Procedure? existingSetter = existingSetters[field.name];
-        cls.addField(cloneVisitor.cloneField(
-            field, null, existingGetter?.reference, existingSetter?.reference));
+        Field clone = cloneVisitor.cloneField(
+            field, null, existingGetter?.reference, existingSetter?.reference);
+        cls.addField(clone);
+        clone.transformerFlags = field.transformerFlags;
         if (existingGetter != null) {
           cls.procedures.remove(existingGetter);
         }
@@ -84,8 +86,10 @@
         if (existingProcedure != null) {
           cls.procedures.remove(existingProcedure);
         }
-        cls.addProcedure(cloneVisitor.cloneProcedure(
-            procedure, existingProcedure?.reference));
+        Procedure clone = cloneVisitor.cloneProcedure(
+            procedure, existingProcedure?.reference);
+        cls.addProcedure(clone);
+        clone.transformerFlags = procedure.transformerFlags;
         continue;
       }
     }
diff --git a/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart b/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
index 1cc5b85..11cfe13 100644
--- a/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
+++ b/pkg/compiler/lib/src/kernel/transformations/late_lowering.dart
@@ -537,6 +537,9 @@
         fileUri: fileUri, reference: field.getterReference)
       ..fileOffset = fileOffset
       ..isNonNullableByDefault = true;
+    // The initializer is copied from [field] to [getter] so we copy the
+    // transformer flags to reflect whether the getter contains super calls.
+    getter.transformerFlags = field.transformerFlags;
     enclosingClass.addProcedure(getter);
 
     VariableDeclaration setterValue = VariableDeclaration('value', type: type)
diff --git a/pkg/dartdev/lib/src/commands/compile.dart b/pkg/dartdev/lib/src/commands/compile.dart
index 0e0d501..288c8d0 100644
--- a/pkg/dartdev/lib/src/commands/compile.dart
+++ b/pkg/dartdev/lib/src/commands/compile.dart
@@ -14,6 +14,7 @@
 import '../core.dart';
 import '../experiments.dart';
 import '../sdk.dart';
+import '../utils.dart';
 import '../vm_interop_handler.dart';
 
 const int compileErrorExitCode = 64;
@@ -136,6 +137,16 @@
     return msg;
   }
 
+  @override
+  ArgParser createArgParser() {
+    return ArgParser(
+      // Don't parse the training arguments for JIT snapshots, but don't accept
+      // flags after the script name for kernel snapshots.
+      allowTrailingOptions: !isJitSnapshot,
+      usageLineLength: dartdevUsageLineLength,
+    );
+  }
+
   bool get isJitSnapshot => commandName == jitSnapshotCmdName;
 
   @override
diff --git a/pkg/dartdev/test/commands/compile_test.dart b/pkg/dartdev/test/commands/compile_test.dart
index 0d497b4..a4e5741 100644
--- a/pkg/dartdev/test/commands/compile_test.dart
+++ b/pkg/dartdev/test/commands/compile_test.dart
@@ -1029,10 +1029,15 @@
         outFile,
         inFile,
         'foo',
+        // Ensure training args aren't parsed by the CLI.
+        // See https://github.com/dart-lang/sdk/issues/49302
+        '-e',
+        '--foobar=bar',
       ],
     );
 
-    expect(result.stdout, predicate((dynamic o) => '$o'.contains('[foo]')));
+    expect(result.stdout,
+        predicate((dynamic o) => '$o'.contains('[foo, -e, --foobar=bar]')));
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
     expect(File(outFile).existsSync(), true,
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index a90af23..3bc7339 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -1397,8 +1397,7 @@
     var savedClass = _classEmittingSignatures;
     _classEmittingSignatures = c;
 
-    var interfaces = c.implementedTypes.toList()
-      ..addAll(c.superclassConstraints());
+    var interfaces = c.implementedTypes.toList()..addAll(c.onClause);
     if (interfaces.isNotEmpty) {
       body.add(js.statement('#[#] = () => [#];', [
         className,
diff --git a/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart b/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
index b567677..87743e7 100644
--- a/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/benchmarker.dart
@@ -176,6 +176,7 @@
   outline_installAllComponentProblems,
 
   body_buildBodies,
+  body_checkMixinSuperAccesses,
   body_finishSynthesizedParameters,
   body_finishDeferredLoadTearoffs,
   body_finishNoSuchMethodForwarders,
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 a489884..101ed7f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -617,6 +617,9 @@
       benchmarker?.enterPhase(BenchmarkPhases.body_buildBodies);
       await loader.buildBodies(loader.sourceLibraryBuilders);
 
+      benchmarker?.enterPhase(BenchmarkPhases.body_checkMixinSuperAccesses);
+      loader.checkMixinSuperAccesses();
+
       benchmarker?.enterPhase(BenchmarkPhases.body_finishSynthesizedParameters);
       finishSynthesizedParameters();
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/verifier.dart b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
index acdf960..40f67fa 100644
--- a/pkg/front_end/lib/src/fasta/kernel/verifier.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/verifier.dart
@@ -9,8 +9,6 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/target/targets.dart';
 
-import 'package:kernel/transformations/flags.dart' show TransformerFlag;
-
 import 'package:kernel/type_environment.dart' show TypeEnvironment;
 
 import 'package:kernel/verifier.dart'
@@ -170,7 +168,7 @@
     if (containingMember == null) {
       problem(node, 'Super call outside of any member');
     } else {
-      if (containingMember.transformerFlags & TransformerFlag.superCalls == 0) {
+      if (!containingMember.containsSuperCalls) {
         problem(
             node, 'Super call in a member lacking TransformerFlag.superCalls');
       }
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 3e629a1..d5bf381 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
@@ -955,7 +955,7 @@
     // the declaration's superclass constraints.
     InterfaceType supertype = cls.supertype!.asInterfaceType;
     Substitution substitution = Substitution.fromSupertype(cls.mixedInType!);
-    for (Supertype constraint in cls.mixedInClass!.superclassConstraints()) {
+    for (Supertype constraint in cls.mixedInClass!.onClause) {
       InterfaceType requiredInterface =
           substitution.substituteSupertype(constraint).asInterfaceType;
       InterfaceType? implementedInterface = hierarchy.getTypeAsInstanceOf(
diff --git a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
index 2460d6f..00682eb 100644
--- a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
@@ -392,8 +392,6 @@
       ClassHierarchy classHierarchy,
       List<DelayedActionPerformer> delayedActionPerformers,
       List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
-    _fieldEncoding.completeSignature(classHierarchy.coreTypes);
-
     for (Annotatable annotatable in _fieldEncoding.annotatables) {
       MetadataBuilder.buildAnnotations(
           annotatable,
@@ -593,10 +591,6 @@
   /// Returns a list of the setters created by this field encoding.
   List<ClassMember> getLocalSetters(SourceFieldBuilder fieldBuilder);
 
-  /// Ensures that the signatures all members created by this field encoding
-  /// are fully typed.
-  void completeSignature(CoreTypes coreTypes);
-
   /// Returns `true` if this encoding is a late lowering.
   bool get isLateLowering;
 }
@@ -658,9 +652,6 @@
   }
 
   @override
-  void completeSignature(CoreTypes coreTypes) {}
-
-  @override
   void createBodies(CoreTypes coreTypes, Expression? initializer) {
     if (initializer != null) {
       _field.initializer = initializer..parent = _field;
@@ -900,11 +891,6 @@
   }
 
   @override
-  void completeSignature(CoreTypes coreTypes) {
-    _lateIsSetField?.type = coreTypes.boolRawType(Nullability.nonNullable);
-  }
-
-  @override
   void createBodies(CoreTypes coreTypes, Expression? initializer) {
     assert(_type != null, "Type has not been computed for field $name.");
     if (isSetEncoding == late_lowering.IsSetEncoding.useSentinel) {
@@ -924,6 +910,10 @@
     }
     _lateGetter.function.body = _createGetterBody(coreTypes, name, initializer)
       ..parent = _lateGetter.function;
+    // The initializer is copied from [_field] to [_lateGetter] so we copy the
+    // transformer flags to reflect whether the getter contains super calls.
+    _lateGetter.transformerFlags = _field.transformerFlags;
+
     if (_lateSetter != null) {
       _lateSetter!.function.body = _createSetterBody(
           coreTypes, name, _lateSetter!.function.positionalParameters.first)
@@ -1099,7 +1089,9 @@
       _lateIsSetField!
         ..isStatic = !isInstanceMember
         ..isStatic = _field.isStatic
-        ..isExtensionMember = isExtensionMember;
+        ..isExtensionMember = isExtensionMember
+        ..type = libraryBuilder.loader
+            .createCoreType('bool', Nullability.nonNullable);
       updatePrivateMemberName(_lateIsSetField!, libraryBuilder);
     }
     _lateGetter
@@ -1722,9 +1714,6 @@
   }
 
   @override
-  void completeSignature(CoreTypes coreTypes) {}
-
-  @override
   void createBodies(CoreTypes coreTypes, Expression? initializer) {
     //assert(initializer != null);
   }
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 f7c0b5c..934983c 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
@@ -1300,6 +1300,7 @@
             .addAll(part.library.problemsAsJson!);
       }
       part.collectInferableTypes(_inferableTypes!);
+      part.takeMixinApplications(_mixinApplications!);
       if (library != part.library) {
         // Mark the part library as synthetic as it's not an actual library
         // (anymore).
@@ -1863,12 +1864,12 @@
     if (declaration.declaresConstConstructor) {
       modifiers |= declaresConstConstructorMask;
     }
-    ClassBuilder classBuilder = new SourceClassBuilder(
+    SourceClassBuilder classBuilder = new SourceClassBuilder(
         metadata,
         modifiers,
         className,
         typeVariables,
-        applyMixins(supertype, mixins, startOffset, nameOffset, endOffset,
+        _applyMixins(supertype, mixins, startOffset, nameOffset, endOffset,
             className, isMixinDeclaration,
             typeVariables: typeVariables,
             isMacro: false,
@@ -2137,7 +2138,7 @@
         getterReference: referenceFrom?.reference);
   }
 
-  TypeBuilder? applyMixins(
+  TypeBuilder? _applyMixins(
       TypeBuilder? supertype,
       MixinApplicationBuilder? mixinApplications,
       int startCharOffset,
@@ -2397,6 +2398,7 @@
             applicationTypeArguments, charOffset,
             instanceTypeVariableAccess:
                 InstanceTypeVariableAccessState.Allowed);
+        registerMixinApplication(application, mixin);
       }
       return supertype;
     } else {
@@ -2404,6 +2406,34 @@
     }
   }
 
+  Map<SourceClassBuilder, TypeBuilder>? _mixinApplications = {};
+
+  /// Registers that [mixinApplication] is a mixin application introduced by
+  /// the [mixedInType] in a with-clause.
+  ///
+  /// This is used to check that super access in mixin declarations have a
+  /// concrete target.
+  void registerMixinApplication(
+      SourceClassBuilder mixinApplication, TypeBuilder mixedInType) {
+    assert(
+        _mixinApplications != null, "Late registration of mixin application.");
+    _mixinApplications![mixinApplication] = mixedInType;
+  }
+
+  void takeMixinApplications(
+      Map<SourceClassBuilder, TypeBuilder> mixinApplications) {
+    assert(_mixinApplications != null,
+        "Mixin applications have already been processed.");
+    mixinApplications.addAll(_mixinApplications!);
+    _mixinApplications = null;
+    Iterable<SourceLibraryBuilder>? patchLibraries = this.patchLibraries;
+    if (patchLibraries != null) {
+      for (SourceLibraryBuilder patchLibrary in patchLibraries) {
+        patchLibrary.takeMixinApplications(mixinApplications);
+      }
+    }
+  }
+
   void addNamedMixinApplication(
       List<MetadataBuilder>? metadata,
       String name,
@@ -2420,7 +2450,7 @@
     // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
     endNestedDeclaration(TypeParameterScopeKind.namedMixinApplication, name)
         .resolveNamedTypes(typeVariables, this);
-    supertype = applyMixins(supertype, mixinApplication, startCharOffset,
+    supertype = _applyMixins(supertype, mixinApplication, startCharOffset,
         charOffset, charEndOffset, name, false,
         metadata: metadata,
         name: name,
@@ -2876,7 +2906,7 @@
         metadata,
         name,
         typeVariables,
-        applyMixins(
+        _applyMixins(
             loader.target.underscoreEnumType,
             supertypeBuilder,
             startCharOffset,
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 9f3e6da..d3b47de 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -69,6 +69,7 @@
 import '../kernel/hierarchy/class_member.dart';
 import '../kernel/hierarchy/delayed.dart';
 import '../kernel/hierarchy/hierarchy_builder.dart';
+import '../kernel/hierarchy/hierarchy_node.dart';
 import '../kernel/hierarchy/members_builder.dart';
 import '../kernel/kernel_helper.dart'
     show DelayedDefaultValueCloner, TypeDependency;
@@ -2099,6 +2100,18 @@
 
   void ignoreAmbiguousSupertypes(Class cls, Supertype a, Supertype b) {}
 
+  /// Creates an [InterfaceType] for the `dart:core` type by the given [name].
+  ///
+  /// This method can be called before [coreTypes] has been computed and only
+  /// required [coreLibrary] to have been set.
+  InterfaceType createCoreType(String name, Nullability nullability,
+      [List<DartType>? typeArguments]) {
+    assert(_coreLibrary != null, "Core library has not been computed yet.");
+    ClassBuilder classBuilder =
+        coreLibrary.lookupLocalMember(name, required: true) as ClassBuilder;
+    return new InterfaceType(classBuilder.cls, nullability, typeArguments);
+  }
+
   void computeCoreTypes(Component component) {
     assert(_coreTypes == null, "CoreTypes has already been computed");
     _coreTypes = new CoreTypes(component);
@@ -2230,7 +2243,7 @@
 
   void checkMixins(List<SourceClassBuilder> sourceClasses) {
     for (SourceClassBuilder builder in sourceClasses) {
-      if (builder.libraryBuilder.loader == this && !builder.isPatch) {
+      if (!builder.isPatch) {
         Class? mixedInClass = builder.cls.mixedInClass;
         if (mixedInClass != null && mixedInClass.isMixinDeclaration) {
           builder.checkMixinApplication(hierarchy, coreTypes);
@@ -2240,6 +2253,54 @@
     ticker.logMs("Checked mixin declaration applications");
   }
 
+  /// Checks that super member access from mixin declarations mixed into
+  /// the classes in the [sourceLibraryBuilders] have a concrete target
+  // TODO(johnniwinther): Make this work for when the mixin declaration is from
+  //  an outline library.
+  void checkMixinSuperAccesses() {
+    _SuperMemberCache superMemberCache = new _SuperMemberCache();
+    for (SourceLibraryBuilder libraryBuilder in sourceLibraryBuilders) {
+      Map<SourceClassBuilder, TypeBuilder> mixinApplications = {};
+      libraryBuilder.takeMixinApplications(mixinApplications);
+      for (MapEntry<SourceClassBuilder, TypeBuilder> entry
+          in mixinApplications.entries) {
+        SourceClassBuilder mixinApplication = entry.key;
+        if (!mixinApplication.isPatch) {
+          ClassHierarchyNode node =
+              hierarchyBuilder.getNodeFromClassBuilder(mixinApplication);
+          ClassHierarchyNode? mixedInNode = node.mixedInNode;
+          if (mixedInNode != null) {
+            Class mixedInClass = mixedInNode.classBuilder.cls;
+            List<Supertype> onClause = mixedInClass.onClause;
+            if (onClause.isNotEmpty) {
+              for (Procedure procedure in mixedInClass.procedures) {
+                if (procedure.containsSuperCalls) {
+                  procedure.function.body?.accept(new _CheckSuperAccess(
+                      libraryBuilder,
+                      mixinApplication.cls,
+                      entry.value,
+                      procedure,
+                      superMemberCache));
+                }
+              }
+              for (Field field in mixedInClass.fields) {
+                if (field.containsSuperCalls) {
+                  field.initializer?.accept(new _CheckSuperAccess(
+                      libraryBuilder,
+                      mixinApplication.cls,
+                      entry.value,
+                      field,
+                      superMemberCache));
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    ticker.logMs("Checked mixin application super-accesses");
+  }
+
   void buildOutlineExpressions(ClassHierarchy classHierarchy,
       List<DelayedDefaultValueCloner> delayedDefaultValueCloners) {
     List<DelayedActionPerformer> delayedActionPerformers =
@@ -2849,3 +2910,118 @@
     return _supertypeMap[vertex] ??= computeSuperClasses(vertex);
   }
 }
+
+/// Visitor that checks that super accesses have a concrete target.
+// TODO(johnniwinther): Update this to perform member cloning when needed by
+// the backend.
+class _CheckSuperAccess extends RecursiveVisitor {
+  final SourceLibraryBuilder _sourceLibraryBuilder;
+  final Class _mixinApplicationClass;
+  final TypeBuilder _typeBuilder;
+  final Member _enclosingMember;
+  final _SuperMemberCache cache;
+
+  _CheckSuperAccess(this._sourceLibraryBuilder, this._mixinApplicationClass,
+      this._typeBuilder, this._enclosingMember, this.cache);
+
+  void _checkMember(Name name,
+      {required Template<Message Function(String name)> template,
+      required bool isSetter,
+      required int accessFileOffset}) {
+    Member? member = cache.findSuperMember(
+        _mixinApplicationClass.superclass, name,
+        isSetter: isSetter);
+    if (member == null) {
+      _sourceLibraryBuilder.addProblem(template.withArguments(name.text),
+          _typeBuilder.charOffset!, noLength, _typeBuilder.fileUri!,
+          context: [
+            messageMixinApplicationNoConcreteMemberContext.withLocation(
+                _enclosingMember.fileUri, accessFileOffset, noLength)
+          ]);
+    }
+  }
+
+  @override
+  void visitSuperMethodInvocation(SuperMethodInvocation node) {
+    super.visitSuperMethodInvocation(node);
+    _checkMember(node.interfaceTarget.name,
+        isSetter: false,
+        template: templateMixinApplicationNoConcreteMethod,
+        accessFileOffset: node.fileOffset);
+  }
+
+  @override
+  void visitSuperPropertyGet(SuperPropertyGet node) {
+    super.visitSuperPropertyGet(node);
+    _checkMember(node.interfaceTarget.name,
+        isSetter: false,
+        template: templateMixinApplicationNoConcreteGetter,
+        accessFileOffset: node.fileOffset);
+  }
+
+  @override
+  void visitSuperPropertySet(SuperPropertySet node) {
+    super.visitSuperPropertySet(node);
+    _checkMember(node.interfaceTarget.name,
+        isSetter: true,
+        template: templateMixinApplicationNoConcreteSetter,
+        accessFileOffset: node.fileOffset);
+  }
+}
+
+/// Cache of concrete members, used by [_CheckSuperAccess] to check that super
+/// accesses have a concrete target.
+class _SuperMemberCache {
+  Map<Class, Map<Name, Member>> _getterMaps = {};
+  Map<Class, Map<Name, Member>> _setterMaps = {};
+
+  Map<Name, Member> _computeGetters(Class cls) {
+    Map<Name, Member> cache = {};
+    for (Procedure procedure in cls.procedures) {
+      if (procedure.kind != ProcedureKind.Setter && !procedure.isAbstract) {
+        cache[procedure.name] = procedure;
+      }
+    }
+    for (Field field in cls.fields) {
+      cache[field.name] = field;
+    }
+    return cache;
+  }
+
+  Map<Name, Member> _computeSetters(Class cls) {
+    Map<Name, Member> cache = {};
+    for (Procedure procedure in cls.procedures) {
+      if (procedure.kind == ProcedureKind.Setter && !procedure.isAbstract) {
+        cache[procedure.name] = procedure;
+      }
+    }
+    for (Field field in cls.fields) {
+      if (field.hasSetter) {
+        cache[field.name] = field;
+      }
+    }
+    return cache;
+  }
+
+  Map<Name, Member> _getConcreteMembers(Class cls, {required bool isSetter}) {
+    if (isSetter) {
+      return _setterMaps[cls] ??= _computeSetters(cls);
+    } else {
+      return _getterMaps[cls] ??= _computeGetters(cls);
+    }
+  }
+
+  Member? findSuperMember(Class? superClass, Name name,
+      {required bool isSetter}) {
+    while (superClass != null) {
+      Map<Name, Member> cache =
+          _getConcreteMembers(superClass, isSetter: isSetter);
+      Member? member = cache[name];
+      if (member != null) {
+        return member;
+      }
+      superClass = superClass.superclass;
+    }
+    return null;
+  }
+}
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 5c0668e..5b1af01 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5612,3 +5612,52 @@
     class Base {}
     class Mixin extends Base {}
     class C extends Base with Mixin {}
+
+MixinApplicationNoConcreteMethod:
+  problemMessage: "The class doesn't have a concrete implementation of the super-invoked member '#name'."
+  analyzerCode: MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER
+  script: |
+    class Super {
+      void method() {}
+    }
+    mixin Mixin on Super {
+      void method() {
+        super.method();
+      }
+    }
+    abstract class AbstractSuper implements Super {}
+    class Class extends AbstractSuper with Mixin {}
+
+MixinApplicationNoConcreteGetter:
+  problemMessage: "The class doesn't have a concrete implementation of the super-accessed member '#name'."
+  analyzerCode: MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER
+  script: |
+    class Super {
+      int get getter => 42; 
+    }
+    mixin Mixin on Super {
+      int get getter {
+        return super.getter;
+      }
+    }
+    abstract class AbstractSuper implements Super {}
+    class Class extends AbstractSuper with Mixin {}
+
+MixinApplicationNoConcreteSetter:
+  problemMessage: "The class doesn't have a concrete implementation of the super-accessed setter '#name'."
+  analyzerCode: MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER
+  script: |
+    class Super {
+      void set setter(int value) {} 
+    }
+    mixin Mixin on Super {
+      void set setter(int value) {
+        super.setter = value;
+      }
+    }
+    abstract class AbstractSuper implements Super {}
+    class Class extends AbstractSuper with Mixin {}
+
+MixinApplicationNoConcreteMemberContext:
+  problemMessage: "This is the super-access that doesn't have a concrete target."
+  severity: CONTEXT
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart b/pkg/front_end/testcases/dart2js/mixin_super/main.dart
new file mode 100644
index 0000000..1c32e50
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart
@@ -0,0 +1,59 @@
+// 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.
+
+import 'main_lib.dart';
+
+mixin Mixin1 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+
+  late int field2 = () {
+    return 88;
+  }();
+
+  void method1() {
+    super.method1();
+  }
+
+  void method2() {}
+
+  int get property1 {
+    return super.property1;
+  }
+
+  void set property1(int value) {
+    super.property1 = value;
+  }
+
+  int get property2 {
+    return 42;
+  }
+
+  void set property2(int value) {}
+}
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+class Class1b extends Class1a with Mixin1 /* Ok */ {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+class Class2b extends Class2a with Mixin1 /* Error */ {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+class Class3b extends Class3a with Mixin1 /* Error */ {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+class Class4b extends Class4a with Mixin2 /* Ok */ {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+class Class5b extends Class5a with Mixin2 /* Error */ {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class6b extends Class6a with Mixin2 /* Error */ {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart.strong.expect b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.strong.expect
new file mode 100644
index 0000000..1fb218a
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.strong.expect
@@ -0,0 +1,492 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int _#Mixin2#field1#AI = _in::createSentinel<core::int>();
+  field core::int _#Mixin2#field2#AI = _in::createSentinel<core::int>();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+  get field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+  set field1(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  get field2() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field2#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field2#AI} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+    return value;
+  }
+  set field2(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..9f8984c
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.strong.transformed.expect
@@ -0,0 +1,563 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+import "dart:_internal" as _in;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int _#Mixin1#field1#AI = _in::createSentinel<core::int>();
+  field core::int _#Mixin1#field2#AI = _in::createSentinel<core::int>();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+  get field1() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+  set field1(core::int value) → void
+    this.{self::Mixin1::_#Mixin1#field1#AI} = value;
+  get field2() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field2#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field2#AI} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+    return value;
+  }
+  set field2(core::int value) → void
+    this.{self::Mixin1::_#Mixin1#field2#AI} = value;
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get field1() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get field1() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get field1() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int _#Mixin2#field1#AI = _in::createSentinel<core::int>();
+  field core::int _#Mixin2#field2#AI = _in::createSentinel<core::int>();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+  get field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+  set field1(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  get field2() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field2#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field2#AI} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+    return value;
+  }
+  set field2(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart.textual_outline.expect b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.textual_outline.expect
new file mode 100644
index 0000000..105f962
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.textual_outline.expect
@@ -0,0 +1,40 @@
+import 'main_lib.dart';
+
+mixin Mixin1 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+  late int field2 = () {
+    return 88;
+  }();
+  void method1() {}
+  void method2() {}
+  int get property1 {}
+  void set property1(int value) {}
+  int get property2 {}
+  void set property2(int value) {}
+}
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+class Class1b extends Class1a with Mixin1 {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+class Class2b extends Class2a with Mixin1 {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+class Class3b extends Class3a with Mixin1 {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+class Class4b extends Class4a with Mixin2 {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+class Class5b extends Class5a with Mixin2 {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class6b extends Class6a with Mixin2 {}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d1d920c
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,40 @@
+import 'main_lib.dart';
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class1b extends Class1a with Mixin1 {}
+
+class Class2b extends Class2a with Mixin1 {}
+
+class Class3b extends Class3a with Mixin1 {}
+
+class Class4b extends Class4a with Mixin2 {}
+
+class Class5b extends Class5a with Mixin2 {}
+
+class Class6b extends Class6a with Mixin2 {}
+
+mixin Mixin1 on Super1, Super2 {
+  int get property1 {}
+  int get property2 {}
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+  late int field2 = () {
+    return 88;
+  }();
+  void method1() {}
+  void method2() {}
+  void set property1(int value) {}
+  void set property2(int value) {}
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.expect b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.expect
new file mode 100644
index 0000000..1fb218a
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.expect
@@ -0,0 +1,492 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int _#Mixin2#field1#AI = _in::createSentinel<core::int>();
+  field core::int _#Mixin2#field2#AI = _in::createSentinel<core::int>();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+  get field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+  set field1(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  get field2() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field2#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field2#AI} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+    return value;
+  }
+  set field2(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.modular.expect b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.modular.expect
new file mode 100644
index 0000000..808a599
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.modular.expect
@@ -0,0 +1,353 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#A};
+  mixin-super-stub set _#Mixin2#field1#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#A} = value;
+  mixin-super-stub get _#Mixin2#field2#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#A};
+  mixin-super-stub set _#Mixin2#field2#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#A} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#A};
+  mixin-super-stub set _#Mixin2#field1#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#A} = value;
+  mixin-super-stub get _#Mixin2#field2#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#A};
+  mixin-super-stub set _#Mixin2#field2#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#A} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#A};
+  mixin-super-stub set _#Mixin2#field1#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#A} = value;
+  mixin-super-stub get _#Mixin2#field2#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#A};
+  mixin-super-stub set _#Mixin2#field2#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#A} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.outline.expect
new file mode 100644
index 0000000..34aaada
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.outline.expect
@@ -0,0 +1,316 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1;
+  late field core::int field2;
+  method method1() → void
+    ;
+  method method2() → void
+    ;
+  get property1() → core::int
+    ;
+  set property1(core::int value) → void
+    ;
+  get property2() → core::int
+    ;
+  set property2(core::int value) → void
+    ;
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#A};
+  mixin-super-stub set _#Mixin2#field1#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#A} = value;
+  mixin-super-stub get _#Mixin2#field2#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#A};
+  mixin-super-stub set _#Mixin2#field2#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#A} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#A};
+  mixin-super-stub set _#Mixin2#field1#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#A} = value;
+  mixin-super-stub get _#Mixin2#field2#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#A};
+  mixin-super-stub set _#Mixin2#field2#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#A} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#A};
+  mixin-super-stub set _#Mixin2#field1#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#A} = value;
+  mixin-super-stub get _#Mixin2#field2#A() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#A};
+  mixin-super-stub set _#Mixin2#field2#A(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#A} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+import "dart:_late_helper" as _la;
+import "dart:_internal" as _in;
+
+class Super1 extends core::Object {
+  field core::int field1;
+  field core::int property1;
+  synthetic constructor •() → mai::Super1
+    ;
+  method method1() → void
+    ;
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2;
+  field core::int property2;
+  synthetic constructor •() → mai::Super2
+    ;
+  method method2() → void
+    ;
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int _#Mixin2#field1#A = _in::createSentinel<core::int>();
+  field core::int _#Mixin2#field2#A = _in::createSentinel<core::int>();
+  method method1() → void
+    ;
+  method method2() → void
+    ;
+  get property1() → core::int
+    ;
+  set property1(core::int value) → void
+    ;
+  get property2() → core::int
+    ;
+  set property2(core::int value) → void
+    ;
+  get field1() → core::int
+    return _la::_lateReadCheck<core::int>(this.{mai::Mixin2::_#Mixin2#field1#A}{core::int}, "field1");
+  set field1(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field1#A} = value;
+  get field2() → core::int
+    return _la::_lateReadCheck<core::int>(this.{mai::Mixin2::_#Mixin2#field2#A}{core::int}, "field2");
+  set field2(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field2#A} = value;
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..9f8984c
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main.dart.weak.transformed.expect
@@ -0,0 +1,563 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dart2js/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+import "dart:_internal" as _in;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int _#Mixin1#field1#AI = _in::createSentinel<core::int>();
+  field core::int _#Mixin1#field2#AI = _in::createSentinel<core::int>();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+  get field1() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+  set field1(core::int value) → void
+    this.{self::Mixin1::_#Mixin1#field1#AI} = value;
+  get field2() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field2#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field2#AI} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+    return value;
+  }
+  set field2(core::int value) → void
+    this.{self::Mixin1::_#Mixin1#field2#AI} = value;
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get field1() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get field1() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get field1() → core::int {
+    core::int value = this.{self::Mixin1::_#Mixin1#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{self::Mixin1::_#Mixin1#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub get _#Mixin2#field1#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field1#AI};
+  mixin-super-stub set _#Mixin2#field1#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  mixin-super-stub get _#Mixin2#field2#AI() → core::int
+    return super.{mai::Mixin2::_#Mixin2#field2#AI};
+  mixin-super-stub set _#Mixin2#field2#AI(core::int value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int _#Mixin2#field1#AI = _in::createSentinel<core::int>();
+  field core::int _#Mixin2#field2#AI = _in::createSentinel<core::int>();
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+  get field1() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field1#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field1#AI} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+    return value;
+  }
+  set field1(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field1#AI} = value;
+  get field2() → core::int {
+    core::int value = this.{mai::Mixin2::_#Mixin2#field2#AI}{core::int};
+    if(_in::isSentinel(value))
+      value = this.{mai::Mixin2::_#Mixin2#field2#AI} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+    return value;
+  }
+  set field2(core::int value) → void
+    this.{mai::Mixin2::_#Mixin2#field2#AI} = value;
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart b/pkg/front_end/testcases/dart2js/mixin_super/main_lib.dart
new file mode 100644
index 0000000..2d5e63b
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/main_lib.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.
+
+class Super1 {
+  void method1() {}
+  int field1 = 42;
+  int property1 = 42;
+}
+
+class Super2 {
+  void method2() {}
+  int field2 = 87;
+  int property2 = 87;
+}
+
+mixin Mixin2 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+
+  late int field2 = () {
+    return 88;
+  }();
+
+  void method1() {
+    super.method1();
+  }
+
+  void method2() {}
+
+  int get property1 {
+    return super.property1;
+  }
+
+  void set property1(int value) {
+    super.property1 = value;
+  }
+
+  int get property2 {
+    return 42;
+  }
+
+  void set property2(int value) {}
+}
diff --git a/pkg/front_end/testcases/dart2js/mixin_super/test.options b/pkg/front_end/testcases/dart2js/mixin_super/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/mixin_super/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart
new file mode 100644
index 0000000..1c32e50
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart
@@ -0,0 +1,59 @@
+// 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.
+
+import 'main_lib.dart';
+
+mixin Mixin1 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+
+  late int field2 = () {
+    return 88;
+  }();
+
+  void method1() {
+    super.method1();
+  }
+
+  void method2() {}
+
+  int get property1 {
+    return super.property1;
+  }
+
+  void set property1(int value) {
+    super.property1 = value;
+  }
+
+  int get property2 {
+    return 42;
+  }
+
+  void set property2(int value) {}
+}
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+class Class1b extends Class1a with Mixin1 /* Ok */ {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+class Class2b extends Class2a with Mixin1 /* Error */ {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+class Class3b extends Class3a with Mixin1 /* Error */ {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+class Class4b extends Class4a with Mixin2 /* Ok */ {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+class Class5b extends Class5a with Mixin2 /* Error */ {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class6b extends Class6a with Mixin2 /* Error */ {}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.strong.expect b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.strong.expect
new file mode 100644
index 0000000..82b5515
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.strong.expect
@@ -0,0 +1,515 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin1#field1 = null;
+  field core::int? _#Mixin1#field2 = null;
+  get field1() → core::int
+    return let final core::int? #t1 = this.{self::Mixin1::_#Mixin1#field1}{core::int?} in #t1 == null ?{core::int} this.{self::Mixin1::_#Mixin1#field1} = (() → core::int {
+      return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+    })(){() → core::int} : #t1{core::int};
+  set field1(core::int field1#param) → void
+    this.{self::Mixin1::_#Mixin1#field1} = field1#param;
+  get field2() → core::int
+    return let final core::int? #t2 = this.{self::Mixin1::_#Mixin1#field2}{core::int?} in #t2 == null ?{core::int} this.{self::Mixin1::_#Mixin1#field2} = (() → core::int {
+      return 88;
+    })(){() → core::int} : #t2{core::int};
+  set field2(core::int field2#param) → void
+    this.{self::Mixin1::_#Mixin1#field2} = field2#param;
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin2#field1 = null;
+  field core::int? _#Mixin2#field2 = null;
+  get field1() → core::int
+    return let final core::int? #t3 = this.{mai::Mixin2::_#Mixin2#field1}{core::int?} in #t3 == null ?{core::int} this.{mai::Mixin2::_#Mixin2#field1} = (() → core::int {
+      return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+    })(){() → core::int} : #t3{core::int};
+  set field1(core::int field1#param) → void
+    this.{mai::Mixin2::_#Mixin2#field1} = field1#param;
+  get field2() → core::int
+    return let final core::int? #t4 = this.{mai::Mixin2::_#Mixin2#field2}{core::int?} in #t4 == null ?{core::int} this.{mai::Mixin2::_#Mixin2#field2} = (() → core::int {
+      return 88;
+    })(){() → core::int} : #t4{core::int};
+  set field2(core::int field2#param) → void
+    this.{mai::Mixin2::_#Mixin2#field2} = field2#param;
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..82b5515
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.strong.transformed.expect
@@ -0,0 +1,515 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin1#field1 = null;
+  field core::int? _#Mixin1#field2 = null;
+  get field1() → core::int
+    return let final core::int? #t1 = this.{self::Mixin1::_#Mixin1#field1}{core::int?} in #t1 == null ?{core::int} this.{self::Mixin1::_#Mixin1#field1} = (() → core::int {
+      return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+    })(){() → core::int} : #t1{core::int};
+  set field1(core::int field1#param) → void
+    this.{self::Mixin1::_#Mixin1#field1} = field1#param;
+  get field2() → core::int
+    return let final core::int? #t2 = this.{self::Mixin1::_#Mixin1#field2}{core::int?} in #t2 == null ?{core::int} this.{self::Mixin1::_#Mixin1#field2} = (() → core::int {
+      return 88;
+    })(){() → core::int} : #t2{core::int};
+  set field2(core::int field2#param) → void
+    this.{self::Mixin1::_#Mixin1#field2} = field2#param;
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin2#field1 = null;
+  field core::int? _#Mixin2#field2 = null;
+  get field1() → core::int
+    return let final core::int? #t3 = this.{mai::Mixin2::_#Mixin2#field1}{core::int?} in #t3 == null ?{core::int} this.{mai::Mixin2::_#Mixin2#field1} = (() → core::int {
+      return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+    })(){() → core::int} : #t3{core::int};
+  set field1(core::int field1#param) → void
+    this.{mai::Mixin2::_#Mixin2#field1} = field1#param;
+  get field2() → core::int
+    return let final core::int? #t4 = this.{mai::Mixin2::_#Mixin2#field2}{core::int?} in #t4 == null ?{core::int} this.{mai::Mixin2::_#Mixin2#field2} = (() → core::int {
+      return 88;
+    })(){() → core::int} : #t4{core::int};
+  set field2(core::int field2#param) → void
+    this.{mai::Mixin2::_#Mixin2#field2} = field2#param;
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.textual_outline.expect b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.textual_outline.expect
new file mode 100644
index 0000000..105f962
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.textual_outline.expect
@@ -0,0 +1,40 @@
+import 'main_lib.dart';
+
+mixin Mixin1 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+  late int field2 = () {
+    return 88;
+  }();
+  void method1() {}
+  void method2() {}
+  int get property1 {}
+  void set property1(int value) {}
+  int get property2 {}
+  void set property2(int value) {}
+}
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+class Class1b extends Class1a with Mixin1 {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+class Class2b extends Class2a with Mixin1 {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+class Class3b extends Class3a with Mixin1 {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+class Class4b extends Class4a with Mixin2 {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+class Class5b extends Class5a with Mixin2 {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class6b extends Class6a with Mixin2 {}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d1d920c
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,40 @@
+import 'main_lib.dart';
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class1b extends Class1a with Mixin1 {}
+
+class Class2b extends Class2a with Mixin1 {}
+
+class Class3b extends Class3a with Mixin1 {}
+
+class Class4b extends Class4a with Mixin2 {}
+
+class Class5b extends Class5a with Mixin2 {}
+
+class Class6b extends Class6a with Mixin2 {}
+
+mixin Mixin1 on Super1, Super2 {
+  int get property1 {}
+  int get property2 {}
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+  late int field2 = () {
+    return 88;
+  }();
+  void method1() {}
+  void method2() {}
+  void set property1(int value) {}
+  void set property2(int value) {}
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.expect b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.expect
new file mode 100644
index 0000000..8b5e70c
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.expect
@@ -0,0 +1,595 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin1#field1 = null;
+  field core::bool _#Mixin1#field1#isSet = false;
+  field core::int? _#Mixin1#field2 = null;
+  field core::bool _#Mixin1#field2#isSet = false;
+  get field1() → core::int {
+    if(!this.{self::Mixin1::_#Mixin1#field1#isSet}{core::bool}) {
+      this.{self::Mixin1::_#Mixin1#field1} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+      this.{self::Mixin1::_#Mixin1#field1#isSet} = true;
+    }
+    return let final core::int? #t1 = this.{self::Mixin1::_#Mixin1#field1}{core::int?} in #t1{core::int};
+  }
+  set field1(core::int field1#param) → void {
+    this.{self::Mixin1::_#Mixin1#field1#isSet} = true;
+    this.{self::Mixin1::_#Mixin1#field1} = field1#param;
+  }
+  get field2() → core::int {
+    if(!this.{self::Mixin1::_#Mixin1#field2#isSet}{core::bool}) {
+      this.{self::Mixin1::_#Mixin1#field2} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+      this.{self::Mixin1::_#Mixin1#field2#isSet} = true;
+    }
+    return let final core::int? #t2 = this.{self::Mixin1::_#Mixin1#field2}{core::int?} in #t2{core::int};
+  }
+  set field2(core::int field2#param) → void {
+    this.{self::Mixin1::_#Mixin1#field2#isSet} = true;
+    this.{self::Mixin1::_#Mixin1#field2} = field2#param;
+  }
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin2#field1 = null;
+  field core::bool _#Mixin2#field1#isSet = false;
+  field core::int? _#Mixin2#field2 = null;
+  field core::bool _#Mixin2#field2#isSet = false;
+  get field1() → core::int {
+    if(!this.{mai::Mixin2::_#Mixin2#field1#isSet}{core::bool}) {
+      this.{mai::Mixin2::_#Mixin2#field1} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+      this.{mai::Mixin2::_#Mixin2#field1#isSet} = true;
+    }
+    return let final core::int? #t3 = this.{mai::Mixin2::_#Mixin2#field1}{core::int?} in #t3{core::int};
+  }
+  set field1(core::int field1#param) → void {
+    this.{mai::Mixin2::_#Mixin2#field1#isSet} = true;
+    this.{mai::Mixin2::_#Mixin2#field1} = field1#param;
+  }
+  get field2() → core::int {
+    if(!this.{mai::Mixin2::_#Mixin2#field2#isSet}{core::bool}) {
+      this.{mai::Mixin2::_#Mixin2#field2} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+      this.{mai::Mixin2::_#Mixin2#field2#isSet} = true;
+    }
+    return let final core::int? #t4 = this.{mai::Mixin2::_#Mixin2#field2}{core::int?} in #t4{core::int};
+  }
+  set field2(core::int field2#param) → void {
+    this.{mai::Mixin2::_#Mixin2#field2#isSet} = true;
+    this.{mai::Mixin2::_#Mixin2#field2} = field2#param;
+  }
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.modular.expect b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.modular.expect
new file mode 100644
index 0000000..44eb126
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.modular.expect
@@ -0,0 +1,449 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin1#field1 = null;
+  field core::bool _#Mixin1#field1#isSet = false;
+  field core::int? _#Mixin1#field2 = null;
+  field core::bool _#Mixin1#field2#isSet = false;
+  get field1() → core::int {
+    if(!this.{self::Mixin1::_#Mixin1#field1#isSet}{core::bool}) {
+      this.{self::Mixin1::_#Mixin1#field1} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+      this.{self::Mixin1::_#Mixin1#field1#isSet} = true;
+    }
+    return let final core::int? #t1 = this.{self::Mixin1::_#Mixin1#field1}{core::int?} in #t1{core::int};
+  }
+  set field1(core::int field1#param) → void {
+    this.{self::Mixin1::_#Mixin1#field1#isSet} = true;
+    this.{self::Mixin1::_#Mixin1#field1} = field1#param;
+  }
+  get field2() → core::int {
+    if(!this.{self::Mixin1::_#Mixin1#field2#isSet}{core::bool}) {
+      this.{self::Mixin1::_#Mixin1#field2} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+      this.{self::Mixin1::_#Mixin1#field2#isSet} = true;
+    }
+    return let final core::int? #t2 = this.{self::Mixin1::_#Mixin1#field2}{core::int?} in #t2{core::int};
+  }
+  set field2(core::int field2#param) → void {
+    this.{self::Mixin1::_#Mixin1#field2#isSet} = true;
+    this.{self::Mixin1::_#Mixin1#field2} = field2#param;
+  }
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.outline.expect
new file mode 100644
index 0000000..e7dd810
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.outline.expect
@@ -0,0 +1,390 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin1#field1;
+  field core::bool _#Mixin1#field1#isSet;
+  field core::int? _#Mixin1#field2;
+  field core::bool _#Mixin1#field2#isSet;
+  get field1() → core::int;
+  set field1(core::int field1#param) → void;
+  get field2() → core::int;
+  set field2(core::int field2#param) → void;
+  method method1() → void
+    ;
+  method method2() → void
+    ;
+  get property1() → core::int
+    ;
+  set property1(core::int value) → void
+    ;
+  get property2() → core::int
+    ;
+  set property2(core::int value) → void
+    ;
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  field core::int field1;
+  field core::int property1;
+  synthetic constructor •() → mai::Super1
+    ;
+  method method1() → void
+    ;
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2;
+  field core::int property2;
+  synthetic constructor •() → mai::Super2
+    ;
+  method method2() → void
+    ;
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin2#field1;
+  field core::bool _#Mixin2#field1#isSet;
+  field core::int? _#Mixin2#field2;
+  field core::bool _#Mixin2#field2#isSet;
+  get field1() → core::int;
+  set field1(core::int field1#param) → void;
+  get field2() → core::int;
+  set field2(core::int field2#param) → void;
+  method method1() → void
+    ;
+  method method2() → void
+    ;
+  get property1() → core::int
+    ;
+  set property1(core::int value) → void
+    ;
+  get property2() → core::int
+    ;
+  set property2(core::int value) → void
+    ;
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..8b5e70c
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main.dart.weak.transformed.expect
@@ -0,0 +1,595 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/dartdevc/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin1#field1 = null;
+  field core::bool _#Mixin1#field1#isSet = false;
+  field core::int? _#Mixin1#field2 = null;
+  field core::bool _#Mixin1#field2#isSet = false;
+  get field1() → core::int {
+    if(!this.{self::Mixin1::_#Mixin1#field1#isSet}{core::bool}) {
+      this.{self::Mixin1::_#Mixin1#field1} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+      this.{self::Mixin1::_#Mixin1#field1#isSet} = true;
+    }
+    return let final core::int? #t1 = this.{self::Mixin1::_#Mixin1#field1}{core::int?} in #t1{core::int};
+  }
+  set field1(core::int field1#param) → void {
+    this.{self::Mixin1::_#Mixin1#field1#isSet} = true;
+    this.{self::Mixin1::_#Mixin1#field1} = field1#param;
+  }
+  get field2() → core::int {
+    if(!this.{self::Mixin1::_#Mixin1#field2#isSet}{core::bool}) {
+      this.{self::Mixin1::_#Mixin1#field2} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+      this.{self::Mixin1::_#Mixin1#field2#isSet} = true;
+    }
+    return let final core::int? #t2 = this.{self::Mixin1::_#Mixin1#field2}{core::int?} in #t2{core::int};
+  }
+  set field2(core::int field2#param) → void {
+    this.{self::Mixin1::_#Mixin1#field2#isSet} = true;
+    this.{self::Mixin1::_#Mixin1#field2} = field2#param;
+  }
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class1b
+    return new self::Class1b::•();
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class2b
+    return new self::Class2b::•();
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get _#Mixin1#field1() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field1};
+  mixin-super-stub set _#Mixin1#field1(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field1} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{self::Mixin1::field1} = field1#param;
+  mixin-super-stub get _#Mixin1#field1#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field1#isSet};
+  mixin-super-stub set _#Mixin1#field1#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field1#isSet} = value;
+  mixin-super-stub get _#Mixin1#field2() → core::int?
+    return super.{self::Mixin1::_#Mixin1#field2};
+  mixin-super-stub set _#Mixin1#field2(core::int? value) → void
+    return super.{self::Mixin1::_#Mixin1#field2} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{self::Mixin1::field2} = field2#param;
+  mixin-super-stub get _#Mixin1#field2#isSet() → core::bool
+    return super.{self::Mixin1::_#Mixin1#field2#isSet};
+  mixin-super-stub set _#Mixin1#field2#isSet(core::bool value) → void
+    return super.{self::Mixin1::_#Mixin1#field2#isSet} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+  static method _#new#tearOff() → self::Class3b
+    return new self::Class3b::•();
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class4b
+    return new self::Class4b::•();
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class5b
+    return new self::Class5b::•();
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int field1#param) → void
+    return super.{mai::Mixin2::field1} = field1#param;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int field2#param) → void
+    return super.{mai::Mixin2::field2} = field2#param;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get _#Mixin2#field1() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field1};
+  mixin-super-stub set _#Mixin2#field1(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1} = value;
+  mixin-super-stub get _#Mixin2#field1#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet};
+  mixin-super-stub set _#Mixin2#field1#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field1#isSet} = value;
+  mixin-super-stub get _#Mixin2#field2() → core::int?
+    return super.{mai::Mixin2::_#Mixin2#field2};
+  mixin-super-stub set _#Mixin2#field2(core::int? value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2} = value;
+  mixin-super-stub get _#Mixin2#field2#isSet() → core::bool
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet};
+  mixin-super-stub set _#Mixin2#field2#isSet(core::bool value) → void
+    return super.{mai::Mixin2::_#Mixin2#field2#isSet} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+  static method _#new#tearOff() → self::Class6b
+    return new self::Class6b::•();
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+  static method _#new#tearOff() → mai::Super1
+    return new mai::Super1::•();
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+  static method _#new#tearOff() → mai::Super2
+    return new mai::Super2::•();
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  field core::int? _#Mixin2#field1 = null;
+  field core::bool _#Mixin2#field1#isSet = false;
+  field core::int? _#Mixin2#field2 = null;
+  field core::bool _#Mixin2#field2#isSet = false;
+  get field1() → core::int {
+    if(!this.{mai::Mixin2::_#Mixin2#field1#isSet}{core::bool}) {
+      this.{mai::Mixin2::_#Mixin2#field1} = (() → core::int {
+        return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+      })(){() → core::int};
+      this.{mai::Mixin2::_#Mixin2#field1#isSet} = true;
+    }
+    return let final core::int? #t3 = this.{mai::Mixin2::_#Mixin2#field1}{core::int?} in #t3{core::int};
+  }
+  set field1(core::int field1#param) → void {
+    this.{mai::Mixin2::_#Mixin2#field1#isSet} = true;
+    this.{mai::Mixin2::_#Mixin2#field1} = field1#param;
+  }
+  get field2() → core::int {
+    if(!this.{mai::Mixin2::_#Mixin2#field2#isSet}{core::bool}) {
+      this.{mai::Mixin2::_#Mixin2#field2} = (() → core::int {
+        return 88;
+      })(){() → core::int};
+      this.{mai::Mixin2::_#Mixin2#field2#isSet} = true;
+    }
+    return let final core::int? #t4 = this.{mai::Mixin2::_#Mixin2#field2}{core::int?} in #t4{core::int};
+  }
+  set field2(core::int field2#param) → void {
+    this.{mai::Mixin2::_#Mixin2#field2#isSet} = true;
+    this.{mai::Mixin2::_#Mixin2#field2} = field2#param;
+  }
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart b/pkg/front_end/testcases/dartdevc/mixin_super/main_lib.dart
new file mode 100644
index 0000000..2d5e63b
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/main_lib.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.
+
+class Super1 {
+  void method1() {}
+  int field1 = 42;
+  int property1 = 42;
+}
+
+class Super2 {
+  void method2() {}
+  int field2 = 87;
+  int property2 = 87;
+}
+
+mixin Mixin2 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+
+  late int field2 = () {
+    return 88;
+  }();
+
+  void method1() {
+    super.method1();
+  }
+
+  void method2() {}
+
+  int get property1 {
+    return super.property1;
+  }
+
+  void set property1(int value) {
+    super.property1 = value;
+  }
+
+  int get property2 {
+    return 42;
+  }
+
+  void set property2(int value) {}
+}
diff --git a/pkg/front_end/testcases/dartdevc/mixin_super/test.options b/pkg/front_end/testcases/dartdevc/mixin_super/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/mixin_super/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/abstract_super_application.dart.weak.expect b/pkg/front_end/testcases/general/abstract_super_application.dart.weak.expect
index c9780cd..3c410b4 100644
--- a/pkg/front_end/testcases/general/abstract_super_application.dart.weak.expect
+++ b/pkg/front_end/testcases/general/abstract_super_application.dart.weak.expect
@@ -9,6 +9,27 @@
 // class Class2 with Mixin implements Super {}
 //       ^
 //
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-invoked member 'method'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:12:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method();
+//           ^
+//
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-accessed member 'property'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:16:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property;
+//                  ^
+//
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:20:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property = value;
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/abstract_super_application.dart.weak.modular.expect b/pkg/front_end/testcases/general/abstract_super_application.dart.weak.modular.expect
index c9780cd..3c410b4 100644
--- a/pkg/front_end/testcases/general/abstract_super_application.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/abstract_super_application.dart.weak.modular.expect
@@ -9,6 +9,27 @@
 // class Class2 with Mixin implements Super {}
 //       ^
 //
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-invoked member 'method'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:12:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method();
+//           ^
+//
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-accessed member 'property'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:16:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property;
+//                  ^
+//
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:20:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property = value;
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/abstract_super_application.dart.weak.transformed.expect b/pkg/front_end/testcases/general/abstract_super_application.dart.weak.transformed.expect
index 5418053..3ab956f 100644
--- a/pkg/front_end/testcases/general/abstract_super_application.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/abstract_super_application.dart.weak.transformed.expect
@@ -9,6 +9,27 @@
 // class Class2 with Mixin implements Super {}
 //       ^
 //
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-invoked member 'method'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:12:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method();
+//           ^
+//
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-accessed member 'property'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:16:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property;
+//                  ^
+//
+// pkg/front_end/testcases/general/abstract_super_application.dart:26:19: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property'.
+// class Class2 with Mixin implements Super {}
+//                   ^
+// pkg/front_end/testcases/general/abstract_super_application.dart:20:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property = value;
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/mixin_super/main.dart b/pkg/front_end/testcases/general/mixin_super/main.dart
new file mode 100644
index 0000000..1c32e50
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/main.dart
@@ -0,0 +1,59 @@
+// 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.
+
+import 'main_lib.dart';
+
+mixin Mixin1 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+
+  late int field2 = () {
+    return 88;
+  }();
+
+  void method1() {
+    super.method1();
+  }
+
+  void method2() {}
+
+  int get property1 {
+    return super.property1;
+  }
+
+  void set property1(int value) {
+    super.property1 = value;
+  }
+
+  int get property2 {
+    return 42;
+  }
+
+  void set property2(int value) {}
+}
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+class Class1b extends Class1a with Mixin1 /* Ok */ {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+class Class2b extends Class2a with Mixin1 /* Error */ {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+class Class3b extends Class3a with Mixin1 /* Error */ {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+class Class4b extends Class4a with Mixin2 /* Ok */ {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+class Class5b extends Class5a with Mixin2 /* Error */ {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class6b extends Class6a with Mixin2 /* Error */ {}
diff --git a/pkg/front_end/testcases/general/mixin_super/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/mixin_super/main.dart.textual_outline.expect
new file mode 100644
index 0000000..105f962
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/main.dart.textual_outline.expect
@@ -0,0 +1,40 @@
+import 'main_lib.dart';
+
+mixin Mixin1 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+  late int field2 = () {
+    return 88;
+  }();
+  void method1() {}
+  void method2() {}
+  int get property1 {}
+  void set property1(int value) {}
+  int get property2 {}
+  void set property2(int value) {}
+}
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+class Class1b extends Class1a with Mixin1 {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+class Class2b extends Class2a with Mixin1 {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+class Class3b extends Class3a with Mixin1 {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+class Class4b extends Class4a with Mixin2 {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+class Class5b extends Class5a with Mixin2 {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class6b extends Class6a with Mixin2 {}
diff --git a/pkg/front_end/testcases/general/mixin_super/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/mixin_super/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..d1d920c
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,40 @@
+import 'main_lib.dart';
+
+abstract class Class1a extends Super1 implements Super2 {}
+
+abstract class Class2a extends Super2 implements Super1 {}
+
+abstract class Class3a implements Super1, Super2 {}
+
+abstract class Class4a extends Super1 implements Super2 {}
+
+abstract class Class5a extends Super2 implements Super1 {}
+
+abstract class Class6a implements Super1, Super2 {}
+
+class Class1b extends Class1a with Mixin1 {}
+
+class Class2b extends Class2a with Mixin1 {}
+
+class Class3b extends Class3a with Mixin1 {}
+
+class Class4b extends Class4a with Mixin2 {}
+
+class Class5b extends Class5a with Mixin2 {}
+
+class Class6b extends Class6a with Mixin2 {}
+
+mixin Mixin1 on Super1, Super2 {
+  int get property1 {}
+  int get property2 {}
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+  late int field2 = () {
+    return 88;
+  }();
+  void method1() {}
+  void method2() {}
+  void set property1(int value) {}
+  void set property2(int value) {}
+}
diff --git a/pkg/front_end/testcases/general/mixin_super/main.dart.weak.expect b/pkg/front_end/testcases/general/mixin_super/main.dart.weak.expect
new file mode 100644
index 0000000..48e7699
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/main.dart.weak.expect
@@ -0,0 +1,435 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
diff --git a/pkg/front_end/testcases/general/mixin_super/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/mixin_super/main.dart.weak.modular.expect
new file mode 100644
index 0000000..8eb525c
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/main.dart.weak.modular.expect
@@ -0,0 +1,317 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/general/mixin_super/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/mixin_super/main.dart.weak.outline.expect
new file mode 100644
index 0000000..73ee809
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/main.dart.weak.outline.expect
@@ -0,0 +1,266 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1;
+  late field core::int field2;
+  method method1() → void
+    ;
+  method method2() → void
+    ;
+  get property1() → core::int
+    ;
+  set property1(core::int value) → void
+    ;
+  get property2() → core::int
+    ;
+  set property2(core::int value) → void
+    ;
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 = self::Class1a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    ;
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 = self::Class2a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    ;
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 = self::Class3a with self::Mixin1 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  mixin-super-stub get field1() → core::int
+    return super.{self::Mixin1::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{self::Mixin1::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{self::Mixin1::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{self::Mixin1::field2} = value;
+  mixin-super-stub get property1() → core::int
+    return super.{self::Mixin1::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{self::Mixin1::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{self::Mixin1::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{self::Mixin1::property2} = value;
+  mixin-super-stub method method1() → void
+    return super.{self::Mixin1::method1}();
+  mixin-super-stub method method2() → void
+    return super.{self::Mixin1::method2}();
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    ;
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 = self::Class4a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    ;
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 = self::Class5a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    ;
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 = self::Class6a with mai::Mixin2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  mixin-super-stub get property1() → core::int
+    return super.{mai::Mixin2::property1};
+  mixin-super-stub set property1(core::int value) → void
+    return super.{mai::Mixin2::property1} = value;
+  mixin-super-stub get property2() → core::int
+    return super.{mai::Mixin2::property2};
+  mixin-super-stub set property2(core::int value) → void
+    return super.{mai::Mixin2::property2} = value;
+  mixin-super-stub get field1() → core::int
+    return super.{mai::Mixin2::field1};
+  mixin-super-stub set field1(core::int value) → void
+    return super.{mai::Mixin2::field1} = value;
+  mixin-super-stub get field2() → core::int
+    return super.{mai::Mixin2::field2};
+  mixin-super-stub set field2(core::int value) → void
+    return super.{mai::Mixin2::field2} = value;
+  mixin-super-stub method method1() → void
+    return super.{mai::Mixin2::method1}();
+  mixin-super-stub method method2() → void
+    return super.{mai::Mixin2::method2}();
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  field core::int field1;
+  field core::int property1;
+  synthetic constructor •() → mai::Super1
+    ;
+  method method1() → void
+    ;
+}
+class Super2 extends core::Object {
+  field core::int field2;
+  field core::int property2;
+  synthetic constructor •() → mai::Super2
+    ;
+  method method2() → void
+    ;
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1;
+  late field core::int field2;
+  method method1() → void
+    ;
+  method method2() → void
+    ;
+  get property1() → core::int
+    ;
+  set property1(core::int value) → void
+    ;
+  get property2() → core::int
+    ;
+  set property2(core::int value) → void
+    ;
+}
diff --git a/pkg/front_end/testcases/general/mixin_super/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/mixin_super/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..e220725
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/main.dart.weak.transformed.expect
@@ -0,0 +1,435 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:43:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class2b extends Class2a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:17:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:23:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:47:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class3b extends Class3a with Mixin1 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main.dart:9:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:55:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class5b extends Class5a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-invoked member 'method1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:27:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.method1();
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:33:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.property1;
+//                  ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'property1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:37:11: Context: This is the super-access that doesn't have a concrete target.
+//     super.property1 = value;
+//           ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed member 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:19:33: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                                 ^
+//
+// pkg/front_end/testcases/general/mixin_super/main.dart:59:36: Error: The class doesn't have a concrete implementation of the super-accessed setter 'field1'.
+// class Class6b extends Class6a with Mixin2 /* Error */ {}
+//                                    ^
+// pkg/front_end/testcases/general/mixin_super/main_lib.dart:19:18: Context: This is the super-access that doesn't have a concrete target.
+//     return super.field1 = super.field1 + 1;
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+abstract class _Mixin1&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → self::_Mixin1&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin1 extends self::_Mixin1&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
+abstract class Class1a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class1a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class1b&Class1a&Mixin1 extends self::Class1a implements self::Mixin1 /*isAnonymousMixin,isEliminatedMixin*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  synthetic constructor •() → self::_Class1b&Class1a&Mixin1
+    : super self::Class1a::•()
+    ;
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  set property2(core::int value) → void {}
+}
+class Class1b extends self::_Class1b&Class1a&Mixin1 {
+  synthetic constructor •() → self::Class1b
+    : super self::_Class1b&Class1a&Mixin1::•()
+    ;
+}
+abstract class Class2a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class2a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class2b&Class2a&Mixin1 extends self::Class2a implements self::Mixin1 /*isAnonymousMixin,isEliminatedMixin*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  synthetic constructor •() → self::_Class2b&Class2a&Mixin1
+    : super self::Class2a::•()
+    ;
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  set property2(core::int value) → void {}
+}
+class Class2b extends self::_Class2b&Class2a&Mixin1 {
+  synthetic constructor •() → self::Class2b
+    : super self::_Class2b&Class2a&Mixin1::•()
+    ;
+}
+abstract class Class3a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class3a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class3b&Class3a&Mixin1 extends self::Class3a implements self::Mixin1 /*isAnonymousMixin,isEliminatedMixin*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  synthetic constructor •() → self::_Class3b&Class3a&Mixin1
+    : super self::Class3a::•()
+    ;
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  set property2(core::int value) → void {}
+}
+class Class3b extends self::_Class3b&Class3a&Mixin1 {
+  synthetic constructor •() → self::Class3b
+    : super self::_Class3b&Class3a&Mixin1::•()
+    ;
+}
+abstract class Class4a extends mai::Super1 implements mai::Super2 {
+  synthetic constructor •() → self::Class4a
+    : super mai::Super1::•()
+    ;
+}
+abstract class _Class4b&Class4a&Mixin2 extends self::Class4a implements mai::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int}/* from org-dartlang-testcase:///main_lib.dart */;
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int}/* from org-dartlang-testcase:///main_lib.dart */;
+  synthetic constructor •() → self::_Class4b&Class4a&Mixin2
+    : super self::Class4a::•()
+    ;
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property2() → core::int {
+    return 42;
+  }
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method /* from org-dartlang-testcase:///main_lib.dart */ method2() → void {}
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property2(core::int value) → void {}
+}
+class Class4b extends self::_Class4b&Class4a&Mixin2 {
+  synthetic constructor •() → self::Class4b
+    : super self::_Class4b&Class4a&Mixin2::•()
+    ;
+}
+abstract class Class5a extends mai::Super2 implements mai::Super1 {
+  synthetic constructor •() → self::Class5a
+    : super mai::Super2::•()
+    ;
+}
+abstract class _Class5b&Class5a&Mixin2 extends self::Class5a implements mai::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int}/* from org-dartlang-testcase:///main_lib.dart */;
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int}/* from org-dartlang-testcase:///main_lib.dart */;
+  synthetic constructor •() → self::_Class5b&Class5a&Mixin2
+    : super self::Class5a::•()
+    ;
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property2() → core::int {
+    return 42;
+  }
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method /* from org-dartlang-testcase:///main_lib.dart */ method2() → void {}
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property2(core::int value) → void {}
+}
+class Class5b extends self::_Class5b&Class5a&Mixin2 {
+  synthetic constructor •() → self::Class5b
+    : super self::_Class5b&Class5a&Mixin2::•()
+    ;
+}
+abstract class Class6a extends core::Object implements mai::Super1, mai::Super2 {
+  synthetic constructor •() → self::Class6a
+    : super core::Object::•()
+    ;
+}
+abstract class _Class6b&Class6a&Mixin2 extends self::Class6a implements mai::Mixin2 /*isAnonymousMixin,isEliminatedMixin*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int}/* from org-dartlang-testcase:///main_lib.dart */;
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int}/* from org-dartlang-testcase:///main_lib.dart */;
+  synthetic constructor •() → self::_Class6b&Class6a&Mixin2
+    : super self::Class6a::•()
+    ;
+  get /* from org-dartlang-testcase:///main_lib.dart */ property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  get /* from org-dartlang-testcase:///main_lib.dart */ property2() → core::int {
+    return 42;
+  }
+  method /* from org-dartlang-testcase:///main_lib.dart */ method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method /* from org-dartlang-testcase:///main_lib.dart */ method2() → void {}
+  set /* from org-dartlang-testcase:///main_lib.dart */ property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  set /* from org-dartlang-testcase:///main_lib.dart */ property2(core::int value) → void {}
+}
+class Class6b extends self::_Class6b&Class6a&Mixin2 {
+  synthetic constructor •() → self::Class6b
+    : super self::_Class6b&Class6a&Mixin2::•()
+    ;
+}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Super1 extends core::Object {
+  field core::int field1 = 42;
+  field core::int property1 = 42;
+  synthetic constructor •() → mai::Super1
+    : super core::Object::•()
+    ;
+  method method1() → void {}
+}
+class Super2 extends core::Object {
+  field core::int field2 = 87;
+  field core::int property2 = 87;
+  synthetic constructor •() → mai::Super2
+    : super core::Object::•()
+    ;
+  method method2() → void {}
+}
+abstract class _Mixin2&Super1&Super2 extends core::Object implements mai::Super1, mai::Super2 /*isAnonymousMixin*/  {
+  synthetic constructor •() → mai::_Mixin2&Super1&Super2
+    : super core::Object::•()
+    ;
+}
+abstract class Mixin2 extends mai::_Mixin2&Super1&Super2 /*isMixinDeclaration*/  {
+  late field core::int field1 = (() → core::int {
+    return super.{mai::Super1::field1} = super.{mai::Super1::field1}.{core::num::+}(1){(core::num) → core::int};
+  })(){() → core::int};
+  late field core::int field2 = (() → core::int {
+    return 88;
+  })(){() → core::int};
+  method method1() → void {
+    super.{mai::Super1::method1}();
+  }
+  method method2() → void {}
+  get property1() → core::int {
+    return super.{mai::Super1::property1};
+  }
+  set property1(core::int value) → void {
+    super.{mai::Super1::property1} = value;
+  }
+  get property2() → core::int {
+    return 42;
+  }
+  set property2(core::int value) → void {}
+}
diff --git a/pkg/front_end/testcases/general/mixin_super/main_lib.dart b/pkg/front_end/testcases/general/mixin_super/main_lib.dart
new file mode 100644
index 0000000..2d5e63b
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/main_lib.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.
+
+class Super1 {
+  void method1() {}
+  int field1 = 42;
+  int property1 = 42;
+}
+
+class Super2 {
+  void method2() {}
+  int field2 = 87;
+  int property2 = 87;
+}
+
+mixin Mixin2 on Super1, Super2 {
+  late int field1 = () {
+    return super.field1 = super.field1 + 1;
+  }();
+
+  late int field2 = () {
+    return 88;
+  }();
+
+  void method1() {
+    super.method1();
+  }
+
+  void method2() {}
+
+  int get property1 {
+    return super.property1;
+  }
+
+  void set property1(int value) {
+    super.property1 = value;
+  }
+
+  int get property2 {
+    return 42;
+  }
+
+  void set property2(int value) {}
+}
diff --git a/pkg/front_end/testcases/general/mixin_super/test.options b/pkg/front_end/testcases/general/mixin_super/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/general/mixin_super/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/incremental.status b/pkg/front_end/testcases/incremental.status
index 9638f1b..aa3f9c4 100644
--- a/pkg/front_end/testcases/incremental.status
+++ b/pkg/front_end/testcases/incremental.status
@@ -11,7 +11,6 @@
 late_lowering: EquivalenceError
 constant_fileoffset_and_typedef: EquivalenceError
 no_such_method_forwarder: EquivalenceError
-no_change_but_changed_type_02: EquivalenceError
 changing_nullability_on_recompile: EquivalenceError
 initializer_not_copied: EquivalenceError
 changed_error: EquivalenceError
diff --git a/pkg/front_end/testcases/incremental/no_change_but_changed_type_02.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_change_but_changed_type_02.yaml.world.1.expect
index 586c7b0..2ac1aeb 100644
--- a/pkg/front_end/testcases/incremental/no_change_but_changed_type_02.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/no_change_but_changed_type_02.yaml.world.1.expect
@@ -24,11 +24,11 @@
     synthetic constructor •() → main::B
       : super dart.core::Object::•()
       ;
-    no-such-method-forwarder get /* from org-dartlang-test:///lib.dart */ _#A#x#isSet() → dynamic
-      return this.{dart.core::Object::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dynamic;
+    no-such-method-forwarder get /* from org-dartlang-test:///lib.dart */ _#A#x#isSet() → dart.core::bool
+      return this.{dart.core::Object::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C1, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dart.core::bool;
     no-such-method-forwarder get /* from org-dartlang-test:///lib.dart */ _#A#x() → dart.core::int?
       return this.{dart.core::Object::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C5, 1, #C2, #C3, dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic} as{TypeError,ForDynamic,ForNonNullableByDefault} dart.core::int?;
-    no-such-method-forwarder set /* from org-dartlang-test:///lib.dart */ _#A#x#isSet(dynamic value) → void
+    no-such-method-forwarder set /* from org-dartlang-test:///lib.dart */ _#A#x#isSet(dart.core::bool value) → void
       return this.{dart.core::Object::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C6, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
     no-such-method-forwarder set /* from org-dartlang-test:///lib.dart */ _#A#x(dart.core::int? value) → void
       return this.{dart.core::Object::noSuchMethod}(new dart.core::_InvocationMirror::_withType(#C7, 2, #C2, dart.core::List::unmodifiable<dynamic>(dart.core::_GrowableList::_literal1<dynamic>(value)), dart.core::Map::unmodifiable<dart.core::Symbol*, dynamic>(#C4))){(dart.core::Invocation) → dynamic};
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
index ec6a7f6..e218902 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.outline.expect
@@ -28,19 +28,19 @@
 
 
 Extra constant evaluation status:
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:814:13 -> SymbolConstant(#catchError)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:814:13 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:814:13 -> SymbolConstant(#test)
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:865:13 -> SymbolConstant(#whenComplete)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:865:13 -> ListConstant(const <Type*>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:865:13 -> MapConstant(const <Symbol*, dynamic>{})
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:909:13 -> SymbolConstant(#timeout)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:909:13 -> ListConstant(const <Type*>[])
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:909:13 -> SymbolConstant(#onTimeout)
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:763:13 -> SymbolConstant(#then)
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:763:13 -> SymbolConstant(#onError)
-Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:874:13 -> SymbolConstant(#asStream)
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:874:13 -> ListConstant(const <Type*>[])
-Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:874:13 -> ListConstant(const <dynamic>[])
-Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:874:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#catchError)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:821:13 -> SymbolConstant(#test)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> SymbolConstant(#whenComplete)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> ListConstant(const <Type*>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:872:13 -> MapConstant(const <Symbol*, dynamic>{})
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#timeout)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> ListConstant(const <Type*>[])
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:916:13 -> SymbolConstant(#onTimeout)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:770:13 -> SymbolConstant(#then)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:770:13 -> SymbolConstant(#onError)
+Evaluated: SymbolLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> SymbolConstant(#asStream)
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <Type*>[])
+Evaluated: ListLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> ListConstant(const <dynamic>[])
+Evaluated: MapLiteral @ org-dartlang-sdk:///sdk/lib/async/future.dart:881:13 -> MapConstant(const <Symbol*, dynamic>{})
 Extra constant evaluation: evaluated: 61, effectively constant: 15
diff --git a/pkg/front_end/tool/ast_model.dart b/pkg/front_end/tool/ast_model.dart
index 4ae1aee..005b7fa 100644
--- a/pkg/front_end/tool/ast_model.dart
+++ b/pkg/front_end/tool/ast_model.dart
@@ -108,6 +108,7 @@
     '_proceduresInternal': FieldRule(name: 'procedures'),
     '_redirectingFactoriesView': null,
     '_redirectingFactoriesInternal': FieldRule(name: 'redirectingFactories'),
+    '_onClause': null,
     'lazyBuilder': null,
     'dirty': null,
   },
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 37c8e79..93f8ea9 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -1072,7 +1072,11 @@
         : (flags & ~FlagHasConstConstructor);
   }
 
-  List<Supertype> superclassConstraints() {
+  /// If this class is a mixin declaration, this list contains the types from
+  /// the `on` clause. Otherwise the list is empty.
+  List<Supertype> get onClause => _onClause ??= _computeOnClause();
+
+  List<Supertype> _computeOnClause() {
     List<Supertype> constraints = <Supertype>[];
 
     // Not a mixin declaration.
@@ -1109,6 +1113,8 @@
   /// The types from the `implements` clause.
   List<Supertype> implementedTypes;
 
+  List<Supertype>? _onClause;
+
   /// Internal. Should *ONLY* be used from within kernel.
   ///
   /// If non-null, the function that will have to be called to fill-out the
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index e0a072b..f0f2c06 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -24,6 +24,7 @@
 dart/minimal_kernel_test: Pass, Slow # Spawns several subprocesses
 dart/null_safety_autodetection_in_kernel_compiler_test: Pass, Slow # Spawns several subprocesses
 dart/print_object_layout_test: Pass, Slow # Spawns several subprocesses
+dart/regress32619_test: Pass, Slow
 dart/slow_path_shared_stub_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
 dart/snapshot_version_test: Skip # This test is a Dart1 test (script snapshot)
 dart/stack_overflow_shared_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
@@ -41,6 +42,7 @@
 dart_2/minimal_kernel_test: Pass, Slow # Spawns several subprocesses
 dart_2/null_safety_autodetection_in_kernel_compiler_test: Pass, Slow # Spawns several subprocesses
 dart_2/print_object_layout_test: Pass, Slow # Spawns several subprocesses
+dart_2/regress32619_test: Pass, Slow
 dart_2/slow_path_shared_stub_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
 dart_2/snapshot_version_test: Skip # This test is a Dart1 test (script snapshot)
 dart_2/stack_overflow_shared_test: Pass, Slow # Uses --shared-slow-path-triggers-gc flag.
diff --git a/sdk/lib/async/async.dart b/sdk/lib/async/async.dart
index f4da9ca..ca05fc6 100644
--- a/sdk/lib/async/async.dart
+++ b/sdk/lib/async/async.dart
@@ -109,7 +109,6 @@
         CastStreamTransformer,
         checkNotNullable,
         EmptyIterator,
-        isNullFuture,
         IterableElementError,
         nullFuture,
         printToZone,
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index 908e5e1..f83386d 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -223,6 +223,13 @@
 /// it's very clearly documented.
 @pragma("wasm:entry-point")
 abstract class Future<T> {
+  /// A `Future<Null>` completed with `null`.
+  ///
+  /// Currently shared with `dart:internal`.
+  /// If that future can be removed, then change this back to
+  /// `_Future<Null>.zoneValue(null, _rootZone);`
+  static final _Future<Null> _nullFuture = nullFuture as _Future<Null>;
+
   /// A `Future<bool>` completed with `false`.
   static final _Future<bool> _falseFuture =
       new _Future<bool>.zoneValue(false, _rootZone);
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index bb942d9..038c3bb 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -515,7 +515,7 @@
       controller
         ..onCancel = () {
           timer.cancel();
-          return nullFuture;
+          return Future._nullFuture;
         }
         ..onPause = () {
           watch.stop();
diff --git a/sdk/lib/async/stream_controller.dart b/sdk/lib/async/stream_controller.dart
index 2d381c5..2baf008 100644
--- a/sdk/lib/async/stream_controller.dart
+++ b/sdk/lib/async/stream_controller.dart
@@ -588,10 +588,7 @@
   Future<void> get done => _ensureDoneFuture();
 
   Future<void> _ensureDoneFuture() =>
-      _doneFuture ??
-      (_isCanceled
-          ? nullFuture as Future<void>
-          : _doneFuture = _Future<void>());
+      _doneFuture ??= _isCanceled ? Future._nullFuture : _Future<void>();
 
   /// Send or enqueue a data event.
   void add(T value) {
@@ -922,7 +919,7 @@
     var cancel = addSubscription.cancel();
     if (cancel == null) {
       addStreamFuture._asyncComplete(null);
-      return nullFuture;
+      return Future._nullFuture;
     }
     return cancel.whenComplete(() {
       addStreamFuture._asyncComplete(null);
diff --git a/sdk/lib/async/stream_impl.dart b/sdk/lib/async/stream_impl.dart
index 9065c46..b4fb5d8 100644
--- a/sdk/lib/async/stream_impl.dart
+++ b/sdk/lib/async/stream_impl.dart
@@ -197,7 +197,7 @@
     if (!_isCanceled) {
       _cancel();
     }
-    return _cancelFuture ?? nullFuture;
+    return _cancelFuture ?? Future._nullFuture;
   }
 
   Future<E> asFuture<E>([E? futureValue]) {
@@ -217,7 +217,7 @@
     };
     _onError = (Object error, StackTrace stackTrace) {
       Future cancelFuture = cancel();
-      if (!isNullFuture(Zone._current, cancelFuture)) {
+      if (!identical(cancelFuture, Future._nullFuture)) {
         cancelFuture.whenComplete(() {
           result._completeError(error, stackTrace);
         });
@@ -297,7 +297,7 @@
   // Hooks called when the input is paused, unpaused or canceled.
   // These must not throw. If overwritten to call user code, include suitable
   // try/catch wrapping and send any errors to
-  // [Zone._current.handleUncaughtError].
+  // [_Zone.current.handleUncaughtError].
   void _onPause() {
     assert(_isInputPaused);
   }
@@ -352,6 +352,7 @@
       // future to finish we must not report the error.
       if (_isCanceled && !_waitsForCancel) return;
       _state |= _STATE_IN_CALLBACK;
+      // TODO(floitsch): this dynamic should be 'void'.
       var onError = _onError;
       if (onError is void Function(Object, StackTrace)) {
         _zone.runBinaryGuarded<Object, StackTrace>(onError, error, stackTrace);
@@ -365,7 +366,8 @@
       _state |= _STATE_WAIT_FOR_CANCEL;
       _cancel();
       var cancelFuture = _cancelFuture;
-      if (cancelFuture != null && !isNullFuture(Zone._current, cancelFuture)) {
+      if (cancelFuture != null &&
+          !identical(cancelFuture, Future._nullFuture)) {
         cancelFuture.whenComplete(sendError);
       } else {
         sendError();
@@ -394,7 +396,7 @@
     _cancel();
     _state |= _STATE_WAIT_FOR_CANCEL;
     var cancelFuture = _cancelFuture;
-    if (cancelFuture != null && !isNullFuture(Zone._current, cancelFuture)) {
+    if (cancelFuture != null && !identical(cancelFuture, Future._nullFuture)) {
       cancelFuture.whenComplete(sendDone);
     } else {
       sendDone();
@@ -670,7 +672,7 @@
     }
   }
 
-  Future cancel() => nullFuture;
+  Future cancel() => Future._nullFuture;
 
   Future<E> asFuture<E>([E? futureValue]) {
     E resultValue;
@@ -817,7 +819,7 @@
 
   Future cancel() {
     _stream._cancelSubscription();
-    return nullFuture;
+    return Future._nullFuture;
   }
 
   bool get isPaused {
@@ -961,7 +963,7 @@
       }
       return subscription.cancel();
     }
-    return nullFuture;
+    return Future._nullFuture;
   }
 
   void _onData(T data) {
diff --git a/sdk/lib/async/stream_pipe.dart b/sdk/lib/async/stream_pipe.dart
index 78ad675..cd707be 100644
--- a/sdk/lib/async/stream_pipe.dart
+++ b/sdk/lib/async/stream_pipe.dart
@@ -26,7 +26,7 @@
 void _cancelAndError(StreamSubscription subscription, _Future future,
     Object error, StackTrace stackTrace) {
   var cancelFuture = subscription.cancel();
-  if (cancelFuture != null && !isNullFuture(Zone._current, cancelFuture)) {
+  if (cancelFuture != null && !identical(cancelFuture, Future._nullFuture)) {
     cancelFuture.whenComplete(() => future._completeError(error, stackTrace));
   } else {
     future._completeError(error, stackTrace);
@@ -55,7 +55,7 @@
   before completing with a value. */
 void _cancelAndValue(StreamSubscription subscription, _Future future, value) {
   var cancelFuture = subscription.cancel();
-  if (cancelFuture != null && !isNullFuture(Zone._current, cancelFuture)) {
+  if (cancelFuture != null && !identical(cancelFuture, Future._nullFuture)) {
     cancelFuture.whenComplete(() => future._complete(value));
   } else {
     future._complete(value);
diff --git a/sdk/lib/core/iterable.dart b/sdk/lib/core/iterable.dart
index 41d7e23..e710e73 100644
--- a/sdk/lib/core/iterable.dart
+++ b/sdk/lib/core/iterable.dart
@@ -823,6 +823,15 @@
 }
 
 /// An [Iterator] that allows moving backwards as well as forwards.
+///
+/// Deprecation note: This interface has turned out to not be
+/// valuable as a general reusable interface. There is still only
+/// one class implementing it, [RuneIterator], and at least one other
+/// bidirectional iterator preferred a different name than `movePrevious`
+/// for the other direction.
+/// As such, this interface does not carry its own weight, and will be
+/// removed in a later release.
+@Deprecated("Use the implementing class directly")
 abstract class BidirectionalIterator<E> implements Iterator<E> {
   /// Move back to the previous element.
   ///
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index 92f7a34..ff3d890 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -136,7 +136,7 @@
   return digit1 * 16 + digit2 - (digit2 & 256);
 }
 
-/// A reusable `null`-valued future per zone used by `dart:async`.
+/// A reusable `null`-valued future used by `dart:async`.
 ///
 /// **DO NOT USE.**
 ///
@@ -156,14 +156,7 @@
 /// This future will be removed again if we can ever do so.
 /// Do not use it for anything other than preserving timing
 /// during the null safety migration.
-Future<Null> get nullFuture =>
-    _nullFutures[Zone.current] ??= Future<Null>.value(null);
-
-/// Whether [future] is the null future of the current zone.
-bool isNullFuture(Zone zone, Future future) =>
-    identical(_nullFutures[zone], future);
-
-final Expando<Future<Null>> _nullFutures = Expando<Future<Null>>();
+final Future<Null> nullFuture = Zone.root.run(() => Future<Null>.value(null));
 
 /// A default hash function used by the platform in various places.
 ///
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 413ef72..20ff4d8 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -3,6 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 bigint_parse_radix_test/3: Slow # Issue http://dartbug.com/47050
+bigint_test: Pass, Slow
 
 [ $compiler == dartdevk ]
 regexp/lookbehind_test/01: Skip # Flaky in uncatchable way.  Issue 36280
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 87e8d4a..1c832d5 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -3,6 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 bigint_parse_radix_test/3: Slow # Issue http://dartbug.com/47050
+bigint_test: Pass, Slow
 
 [ $compiler == dartdevk ]
 regexp/lookbehind_test/01: Skip # Flaky in uncatchable way.  Issue 36280
diff --git a/tests/lib/async/null_future_zone_test.dart b/tests/lib/async/null_future_zone_test.dart
index c74554b..9a266be 100644
--- a/tests/lib/async/null_future_zone_test.dart
+++ b/tests/lib/async/null_future_zone_test.dart
@@ -13,33 +13,21 @@
     Expect.isFalse(await it.moveNext());
 
     late Future nullFuture;
-
-    bool nullFutureZoneUsed = false;
-    runZoned(() {
-      // Known code that exposes the special "nullFuture".
-      nullFuture = (new StreamController()..stream.listen(null).cancel()).done;
-    }, zoneSpecification: new ZoneSpecification(scheduleMicrotask:
-        (Zone self, ZoneDelegate parent, Zone zone, void f()) {
-      Expect.identical(zone, self);
-      nullFutureZoneUsed = true;
-      parent.scheduleMicrotask(zone, f);
-    }));
-
-    nullFuture.then((value) {
-      Expect.isNull(value);
-      Expect.isTrue(nullFutureZoneUsed);
-      asyncEnd();
-    });
-
     late Future falseFuture;
 
     runZoned(() {
+      nullFuture = (new StreamController()..stream.listen(null).cancel()).done;
       falseFuture = it.moveNext();
     }, zoneSpecification: new ZoneSpecification(scheduleMicrotask:
         (Zone self, ZoneDelegate parent, Zone zone, void f()) {
       Expect.fail("Should not be called");
     }));
 
+    nullFuture.then((value) {
+      Expect.isNull(value);
+      asyncEnd();
+    });
+
     falseFuture.then((value) {
       Expect.isFalse(value);
       asyncEnd();
diff --git a/tests/lib_2/async/null_future_zone_test.dart b/tests/lib_2/async/null_future_zone_test.dart
index 77cb1b7..3322916 100644
--- a/tests/lib_2/async/null_future_zone_test.dart
+++ b/tests/lib_2/async/null_future_zone_test.dart
@@ -15,32 +15,21 @@
     Expect.isFalse(await it.moveNext());
 
     Future nullFuture;
-
-    bool nullFutureZoneUsed = false;
-    runZoned(() {
-      nullFuture = (new StreamController()..stream.listen(null).cancel()).done;
-    }, zoneSpecification: new ZoneSpecification(scheduleMicrotask:
-        (Zone self, ZoneDelegate parent, Zone zone, void f()) {
-      Expect.identical(zone, self);
-      nullFutureZoneUsed = true;
-      parent.scheduleMicrotask(zone, f);
-    }));
-
-    nullFuture.then((value) {
-      Expect.isNull(value);
-      Expect.isTrue(nullFutureZoneUsed);
-      asyncEnd();
-    });
-
     Future falseFuture;
 
     runZoned(() {
+      nullFuture = (new StreamController()..stream.listen(null).cancel()).done;
       falseFuture = it.moveNext();
     }, zoneSpecification: new ZoneSpecification(scheduleMicrotask:
         (Zone self, ZoneDelegate parent, Zone zone, void f()) {
       Expect.fail("Should not be called");
     }));
 
+    nullFuture.then((value) {
+      Expect.isNull(value);
+      asyncEnd();
+    });
+
     falseFuture.then((value) {
       Expect.isFalse(value);
       asyncEnd();
diff --git a/tools/VERSION b/tools/VERSION
index 5671960..67be777 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 225
+PRERELEASE 226
 PRERELEASE_PATCH 0
\ No newline at end of file